字符串函数

这些str开头的函数均包含在string.h头文件中

  1. strlen(const char*str) 用于统计字符串的长度
  2. strcat(char*str1,const char*str2) 将str2拼接在str1后,返回值是拼接第二个字符串后第一个字符串的地址
  3. strncat(char*str1,const char*str2,size_t n) 解决了strcat中分配给str1的空间不够大,溢出到相邻存储单元的问题。第三个参数指定了最大添加字符数
  4. strcmp(const char*str1,const char*str2) 比较字符串,返回0时字符串相等,>0时str1>str2,<0时str1<str2
  5. strncmp(const char*str1,const char*str2,size_t n) 可以限定只查比较n个字符
  6. strcpy(const char*str1,const char*str2) 将str2复制到str1
  7. strncpy(const char*str1,const char*str2,size_t n) 第三个参数指明可拷贝的最大字符数
  8. sprintf(char*str,const char*format,……) 其声明在stdio.h中而非string.h,与printf类似,但是其是把数据写入字符串(第一个参数)
  9. strchr(const char*s,int c) 若s字符串包含c字符,则返回s首次出现c的指针,未找到则返回空指针
  10. strrchr(const char*s,int c) 若s字符串包含c字符,则返回s最后一次出现c的指针,未找到则返回空指针
  11. strstr(const char*s1,const char*s2) 若s1字符串包含s2字符串,则返回s1首次出现s2的指针,未找到则返回空指针
  12. strpbrk(const char*s1,const char*s2) 若s1字符串包含s2字符串中的任意字符,则返回s1首次出现s2中任意字符的指针,未找到则返回空指针
  13. atoi(const char*s) 将字符串转换为整数(字符串’23’->数字23)

I/O函数

  1. getchar() 从标准输入 stdin 获取一个无符号字符,返回值为该字符的ASCII码值

  2. putchar() 打印其参数

  3. getc(FILE *stream) 从给定的输入流中读取一个无符号字符,返回值为该字符的ASCII码值

  4. putc(int char, FILE *stream) 将指定的字符(一个无符号字符)写入到指定的流中

  5. puts(const char*str) 只显示字符串,且在显示的字符串末尾自动添加换行符

  6. gets(char*str) 其读取整行输入,直到遇到换行符,然后丢弃换行符,储存其余字符,并在这些字符末尾添加空字符使其成为一个C字符串(其不会检查数组的长度,可能会导致缓冲区溢出,C11标准已废除该函数)

  7. fgets(char*str,int n,FILE*stream) 其通过第二个参数限制读入的字符数,设置的值为n,则其将读入n-1个字符,或读到遇到的第一个换行符为止。其读取到换行符时会将其储存在字符串中。第三个参数指明要读入的文件,标准输入使用stdin即可

  8. fputs(const char*str,FILE*stream) 其不会像puts函数那样在输出字符串末尾加上换行符

  9. gets_s(char*str,rsize_t n) 只要输入行未超过最大字符数,其与gets几乎一样

  10. 自定义s_gets

    函数原型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
char *s_gets(char *st, int n)  
{
char *ret_val;
char *find;
ret_val = fgets(st, n, stdin);
if(ret_val) //若指针不为空
{
find = strchr(st, '\n');
if(find)
{
*find = '\0'; //将\n换为\0
}
else
{
while(getchar() != '\n') //将\n后的内容丢弃
continue;
}
}
return ret_val;
}

文件读写函数

  1. fopen(const char*filename,const char*mode) 打开文件,第一个参数是文件名,第二个参数是打开模式,返回值为文件指针

    打开模式:

    1. r 只读
    2. w 写入,若文件不存在则创建,若文件存在则清空
    3. a 追加,若文件不存在则创建,若文件存在则从文件末尾开始写入
    4. r+ 读写,若文件不存在则报错
    5. w+ 写读,若文件不存在则创建,若文件存在则清空
    6. a+ 写读,若文件不存在则创建,若文件存在则从文件末尾开始写入
  2. fclose(FILE*stream) 关闭文件,返回值为0表示成功关闭

  3. fprintf(FILE*stream,const char*format,……) 将数据写入文件,与printf类似

  4. fscanf(FILE*stream,const char*format,……) 从文件中读取数据,与scanf类似

  5. fseek(FILE*stream,long int offset,int origin) 移动文件指针,第一个参数是文件指针,第二个参数是偏移量,第三个参数是偏移的起始位置,返回值为0表示成功移动

  6. ftell(FILE*stream) 返回文件指针相对于文件开头的偏移量

ctype.h系列

字符测试函数

  1. isalnum() 字母或数字
  2. isalpha() 字母
  3. isblank() 标准的空白字符或被本地化指定为空白的字符
  4. iscntrl() 控制字符
  5. isdigit() 数字
  6. isgraph() 除空格外的任意可打印字符
  7. islower() 小写字符
  8. isprint() 可打印字符
  9. ispunct() 标点符号
  10. isspace() 空白字符或被本地化指定为空白的字符
  11. isupper() 大写字母
  12. isxdigit() 十六进制数字符
    如果是对应参数,则返回1

字符映射函数

  1. tolower() 若参数是大写字符,则返回小写字符;否则返回原参数
  2. toupper() 若参数是小写字符,则返回大写字符;否则返回原参数

布尔值

布尔值使用_Bool作为类型名,该变量只能存储1或0,若把其他非0值赋给该类型,则该变量设置为1

若使用stdbool.h头文件,即可用bool代替_Bool作为别名,且把true定义为false分别定义为1和0的符号常量,以和C++兼容

复合字面量

复合字面量是匿名的,所以不能先创建再使用,必须在创建的同时使用它。

使用示例:

1
2
int * ptr;                      //定义指针
ptr = (int [2]){ 10, 20 }; //使指针指向该复合字面量