C语言(九):字符串

xiaoxiao2021-02-28  132

在C语言中没有字符串,只有字符数组,所以字符数组相当于字符串,字符数组是以\0结尾的。

scanf输入字符串,存在缓冲区溢出

char s[10] = { 0 }; scanf("%s", s); /* "%s"的作用就是输入一个字符串的,scanf是以回车键作为输入完成标示的,但回车键本身并不会作为字符串的一部分 如果scanf参数中的数组长度小于用户在键盘输入的长度,那么scanf就会缓冲区溢出,导致程序崩溃 */ int i; for (i = 0; i < 10; i++) { printf("%d\n", s[i]); } printf("----------------------------------\n"); printf("%s\n", s);

gets:输入字符串,存在缓冲区溢出

char s[100] = { 0 }; gets(s); /* gets认为回车的输入结束标示,空格不是输入结束标示,所以用gets这个函数就可以实现输入带空格的字符串 gets和scanf一样存在缓冲区溢出的问题 Gets不能用类似“%s”或者“%d”之类的字符转义,只能接受字符串的输入*/ int i; for (i = 0; i < 10; i++) { printf("%d\n", s[i]); } printf("----------------------------------\n"); printf("%s\n", s);

fgets:输入字符串,不存在缓冲区溢出

/* gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据。多出来的字符会导致内存溢出,fgets函数改进了这个问题。 由于fgets函数是为读取文件设计的,所以读取键盘时没有gets那么方便 */ char s[100] = { 0 }; fgets(s, sizeof(s), stdin);

puts:打印字符串

/* puts函数打印字符串,与printf不同,puts会在最后自动添加一个’\n’ */ char s[] = "hello world"; puts(s);

fputs:puts的文件操作版本

char s[] = "hello world"; fputs(s, stdout);

strlen:字符串长度

size_t strlen(const char * _Str); 返回不包含字符串结尾’\0’的字符串长度

char s[100] = "hello world"; int len = strlen(s); //得到字符串长度,返回一个字符串中有效字符的数量(不包含字符串结尾的0) printf("len = %d\n", len);

strcat:字符串追加

size_t strcat(char * _Str1, const char * _Str2); 将参数_Str2追加到_Str1后尾

char s[1024] = "hello world"; int len = strlen(s);//得到字符串长度,返回一个字符串中有效字符的数量(不包含字符串结尾的0) printf("len = %d\n", len); char s1[100] = "abc123456789"; strcat(s, s1);//将两个字符串合并,结果放入第一个参数里面,strcat也存在缓冲区溢出的问题 printf("%s\n", s);

strncat:字符串有限追加

size_t strncat(char * _Str1, const char * _Str2, size_t len);

strcmp,字符串比较,可用于字符串排序

若str1==str2,则返回零; 若str1>str2,则返回正数; 若str1

char buf[] = "abc@defg@igk"; char *p = strtok(buf, "@"); while (p) { printf("%s\n", p); p = strtok(NULL, "@"); }

atoi转化为int,atof转化为float,atol转化为long 需要包含头文件stdlib.h

转载请注明原文地址: https://www.6miu.com/read-28127.html

最新回复(0)