C语言学习笔记
字符串函数
这些str开头的函数均包含在string.h
头文件中
strlen(const char*str)
用于统计字符串的长度strcat(char*str1,const char*str2)
将str2拼接在str1后,返回值是拼接第二个字符串后第一个字符串的地址strncat(char*str1,const char*str2,size_t n)
解决了strcat中分配给str1的空间不够大,溢出到相邻存储单元的问题。第三个参数指定了最大添加字符数strcmp(const char*str1,const char*str2)
比较字符串,返回0时字符串相等,>0时str1>str2,<0时str1<str2strncmp(const char*str1,const char*str2,size_t n)
可以限定只查比较n个字符strcpy(const char*str1,const char*str2)
将str2复制到str1strncpy(const char*str1,const char*str2,size_t n)
第三个参数指明可拷贝的最大字符数sprintf(char*str,const char*format,……)
其声明在stdio.h中而非string.h,与printf类似,但是其是把数据写入字符串(第一个参数)strchr(const char*s,int c)
若s字符串包含c字符,则返回s首次出现c的指针,未找到则返回空指针strrchr(const char*s,int c)
若s字符串包含c字符,则返回s最后一次出现c的指针,未找到则返回空指针strstr(const char*s1,const char*s2)
若s1字符串包含s2字符串,则返回s1首次出现s2的指针,未找到则返回空指针strpbrk(const char*s1,const char*s2)
若s1字符串包含s2字符串中的任意字符,则返回s1首次出现s2中任意字符的指针,未找到则返回空指针atoi(const char*s)
将字符串转换为整数(字符串’23’->数字23)
I/O函数
getchar()
从标准输入 stdin 获取一个无符号字符,返回值为该字符的ASCII码值putchar()
打印其参数getc(FILE *stream)
从给定的输入流中读取一个无符号字符,返回值为该字符的ASCII码值putc(int char, FILE *stream)
将指定的字符(一个无符号字符)写入到指定的流中puts(const char*str)
只显示字符串,且在显示的字符串末尾自动添加换行符gets(char*str)
其读取整行输入,直到遇到换行符,然后丢弃换行符,储存其余字符,并在这些字符末尾添加空字符使其成为一个C字符串(其不会检查数组的长度,可能会导致缓冲区溢出,C11标准已废除该函数)fgets(char*str,int n,FILE*stream)
其通过第二个参数限制读入的字符数,设置的值为n,则其将读入n-1个字符,或读到遇到的第一个换行符为止。其读取到换行符时会将其储存在字符串中。第三个参数指明要读入的文件,标准输入使用stdin即可fputs(const char*str,FILE*stream)
其不会像puts函数那样在输出字符串末尾加上换行符gets_s(char*str,rsize_t n)
只要输入行未超过最大字符数,其与gets几乎一样自定义
s_gets
函数原型:
1 | char *s_gets(char *st, int n) |
文件读写函数
fopen(const char*filename,const char*mode)
打开文件,第一个参数是文件名,第二个参数是打开模式,返回值为文件指针打开模式:
- r 只读
- w 写入,若文件不存在则创建,若文件存在则清空
- a 追加,若文件不存在则创建,若文件存在则从文件末尾开始写入
- r+ 读写,若文件不存在则报错
- w+ 写读,若文件不存在则创建,若文件存在则清空
- a+ 写读,若文件不存在则创建,若文件存在则从文件末尾开始写入
fclose(FILE*stream)
关闭文件,返回值为0表示成功关闭fprintf(FILE*stream,const char*format,……)
将数据写入文件,与printf类似fscanf(FILE*stream,const char*format,……)
从文件中读取数据,与scanf类似fseek(FILE*stream,long int offset,int origin)
移动文件指针,第一个参数是文件指针,第二个参数是偏移量,第三个参数是偏移的起始位置,返回值为0表示成功移动ftell(FILE*stream)
返回文件指针相对于文件开头的偏移量
ctype.h系列
字符测试函数
isalnum()
字母或数字isalpha()
字母isblank()
标准的空白字符或被本地化指定为空白的字符iscntrl()
控制字符isdigit()
数字isgraph()
除空格外的任意可打印字符islower()
小写字符isprint()
可打印字符ispunct()
标点符号isspace()
空白字符或被本地化指定为空白的字符isupper()
大写字母isxdigit()
十六进制数字符
如果是对应参数,则返回1
字符映射函数
tolower()
若参数是大写字符,则返回小写字符;否则返回原参数toupper()
若参数是小写字符,则返回大写字符;否则返回原参数
布尔值
布尔值使用_Bool
作为类型名,该变量只能存储1或0,若把其他非0值赋给该类型,则该变量设置为1
若使用stdbool.h
头文件,即可用bool
代替_Bool
作为别名,且把true
定义为false
分别定义为1和0的符号常量,以和C++兼容
复合字面量
复合字面量是匿名的,所以不能先创建再使用,必须在创建的同时使用它。
使用示例:
1 | int * ptr; //定义指针 |