gets()

函数原型:

1
char * gets (char *__str);

功能:从标准输入读入字符,并保存到__str指定的内存空间,直到出现换行符或读到文件结尾为止。

参数:s 字符串首地址。
返回值:
成功:读入的字符串。
失败:NULL

例子:

1
2
3
4
5
6
7
void string_test(void)
{
char s[100];
if (gets(s) != NULL) {
printf("%s\n", s);
}
}

调用该函数会提示警告是危险的函数,可以使用 fgets()

1
call to 'gets' declared with attribute warning: Using gets() is always unsafe - use fgets()

fgets()

头文件:#include<stdio.h>

函数原型:

1
char * fgets (char *__restrict__ __s, int __n, FILE *__restrict__ __stream);

功能:从stream指定的文件内读入字符,保存到__s所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size - 1个字符为止,最后会自动加上字符 \0 作为字符串结束。

参数:

  • __s 字符串
  • __n 指定最大读取字符串的长度
  • __stream 文件指针,如果读键盘输入的字符串,固定写为stdin

返回值:

  • 成功 成功读取的字符串
  • 读到文件尾或出错 NULL

描述:

fgets()在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。通过scanfgets输入一个字符串的时候,不包含结尾的\n,但通过fgets结尾多了\nfgets()函数是安全的,不存在缓冲区溢出的问题。

例子:

1
2
3
4
5
6
7
void string_test(void)
{
char s[10];
printf("请输入一些字符串:\n>>>");
fgets(s, sizeof(s), stdin);
printf("%s\n", s);
}

输出:

1
2
3
4
E:\work\code\c_dev\c_learn\build\demos [main ≡ +6 ~11 -5 !]> ."E:/work/code/c_dev/c_learn/build/demos/DEMOS.exe"
请输入一些字符串:
>>>hello,world!
hello,wor

可以看到,如果输入的长度大于 10 时,会自动截取。

puts()

函数原型:

1
int puts(const char *_Str);

在标准输出输出字符串 _Str,在在输出完成后自动加一个 \n

返回值:

  • 成功 非负值
  • 失败 -1

fputs()

函数原型:

1
int fputs(const char * __restrict__ _Str,FILE * __restrict__ _File);

功能:将_Str所指定的字符串写入到stream指定的文件中,字符串结束符\0不写入文件。

参数:

  • _Str 要输出的字符串
  • _File 文件指针,如果把字符串输出到屏幕,固定写为stdout

返回值:

  • 成功 0
  • 失败 -1

注意:fputs()puts()的文件操作版本,但fputs() 不会自动输出一个\n

例子:

1
fputs(">>> Hello,World!", stdout);

strlen()

头文件:#include <string.h>

函数原型:

1
size_t strlen(const char *_Str);

功能:算指定指定字符串_Str的长度,不包含字符串结束符\0

返回值:字符串的长度

例子:

1
2
3
4
puts("请输入一些内容:");
fputs(">>> ", stdout);
fgets(s, sizeof(s), stdin);
printf(">>> %d\n", strlen(s)); // 获取字符串的长度

输出:

1
2
3
4
E:\work\code\c_dev\c_learn\build\demos [main ≡ +6 ~11 -5 !]> ."E:/work/code/c_dev/c_learn/build/demos/DEMOS.exe"
请输入一些内容:
>>> hello
>>> 6

strcpy()

头文件:#include <string.h>

函数原型:

1
char *strcpy(char *__restrict__ _Dest, const char *__restrict__ _Source);

功能:把_Source所指向的字符串复制到_Dest所指向的空间中,\0也会拷贝过去。

返回值:

  • 成功 返回_Dest字符串的首地址。
  • 失败 NULL

注意:如果参数_Dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况。

例子:

1
2
3
char s[10];
strcpy(s, "hello");
printf(">>> %s\n", s);

strncpy()

函数原型:

1
char * strncpy(char * __restrict__ __dst, const char * __restrict__ __src, size_t __n);

和 strcpy() 类似,只是多了一个参数。

功能:把__src指向字符串的前n个字符复制到__dst所指向的空间中,是否拷贝结束符看指定的长度是否包含\0

返回值:

  • 成功 返回__dst字符串的首地址。
  • 失败 NULL

注意:strncpy() 可能会导致字符串乱码。

strcat()

函数原型:

1
char * strcat(char * __restrict__ __dst, const char * __restrict__ __src);

功能:将__src字符串连接到__dst的尾部,\0 也会追加过去。

返回值:

  • 成功 返回__dst字符串的首地址。
  • 失败 NULL

strncat()

功能:将__src字符串前n个字符连接到__dst的尾部,\0也会追加过去。

返回值:

  • 成功 返回__dst字符串的首地址。
  • 失败 NULL

strcmp()

函数原型:

1
int __cdecl strcmp(const char *_Str1,const char *_Str2);

功能: 比较 _Str1 和 _Str2 的大小,比较的是字符ASCII码大小。

返回值:

  • 相等:0
  • 大于:>0
  • 小于:<0

strncmp()

函数原型:

1
int __cdecl strncmp(const char *_Str1,const char *_Str2,size_t _MaxCount);

功能: 比较 _Str1 和 _Str2 前n个字符的大小,比较的是字符ASCII码大小。

sprintf()

函数原型:

1
int sprintf (char *__stream, const char *__format, ...);

功能:根据参数__format字符串来转换并格式化数据,然后将结果输出到__stream指定的空间中,直到出现字符串结束符 \0 为止。

例子:

1
2
3
4
5
int x = 10;
int y = 20;
int len = sprintf(s, "x: %d\ny: %d\n", x, y);
printf("len: %d\n", len);
puts(s);

sscanf()

函数原型:

1
int sscanf(const char *__source, const char *__format, ...);

例子:

1
2
3
4
5
6
char src[] = "张三 15";
char name[20];
int age;
sscanf(src, "%s%d", name, &age);
printf("%s\n", name);
printf("%d\n", age);

输出:

1
2
3
E:\work\code\c_dev\c_learn\build\demos [main ≡ +6 ~11 -5 !]> ."E:/work/code/c_dev/c_learn/build/demos/DEMOS.exe"
张三
15

参考:

strchr()

函数原型:

1
char * strchr(const char *_Str,int _Val);

功能:在字符串_Str中查找字母_Val出现的位置。

返回值:

  • 成功:返回第一次出现的_Val地址
  • 失败: NULL

例子:

1
2
3
char src[] = "hello123_world%你好";
char* new_src = strchr(src, '1');
printf("new_src: %s\n", new_src);

输出:

1
2
E:\work\code\c_dev\c_learn\build\demos [main ≡ +6 ~11 -5 !]> ."E:/work/code/c_dev/c_learn/build/demos/DEMOS.exe"
new_src: 123_world%你好

strstr()

函数原型:

1
char * strstr(const char *_Str,const char *_SubStr);

功能:在字符串_Str中查找字符串_SubStr出现的位置。

参数:

  • _Str:源字符串首地址
  • _SubStr:匹配字符串首地址

返回值:

成功:返回第一次出现的_SubStr地址
失败: NULL

例子:

1
2
3
4
char src1[] = "hello123_world%你好";
char src2[] = "o12";
char* new_src = strstr(src1, src2);
printf("new_src: %s\n", new_src);

输出:

1
2
E:\work\code\c_dev\c_learn\build\demos [main ≡ +6 ~11 -5 !]> ."E:/work/code/c_dev/c_learn/build/demos/DEMOS.exe"
new_src: o123_world%你好