字符串函数
一、函数strchr与strrchr
- 注意:
a.这两个函数的功能,都是在指定的字符串 s 中,试图找到字符 c。
b.strchr() 从左往右找,strrchr() 从右往左找。
c.字符串结束标记 ‘\0’ 被认为是字符串的一部分。
char *p;
p = strchr("www.qq.com", '.'); // 从左到右找到第一个出现的字符'.'
printf("%s\n", p); // 输出 ".qq.com"
p = strrchr("www.qq.com", '.');// 从右到左找到第一个出现的字符'.'
printf("%s\n", p); // 输出 ".com"
二、函数strstr
char *s = "abcd.txt";
char *p = strstr(s, ".wps");
if(p == NULL)
printf("文件[%s]不是WPS文件\n", s);
else
printf("文件[%s]是WPS文件\n", s);
三、函数strlen
char *s = "www.111111.com";
printf("长度是:%d\n", strlen(s));
四、函数strcpy与strncpy
- 注意:
a.复制src字符串的时候,也会将’\0’,一并复制到dest中
b.这两个函数的功能,都是将 src 中的字符串,复制到 dest 中。
c.strcpy() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
d.strncpy() 有边界控制,最多复制 n+1 个字符(其中最后一个是 ‘\0’ )到 dest 中。
char s1[5] = "abc";
strcpy(s1, "xyz);
printf("%s\n", s1); // 输出 "xyz",原有的"abc"被覆盖
char s2[5] = "abc";
strcpy(s2, "123456789"); // 此处操作内存溢出,可能会发生内存崩溃
char s[5] = "abc";
strncpy(s, "123456789", sizeof(s)-1);
printf("%s\n", s); // 输出 "1234",有边界保护,不会溢出
strncpy()是具备边界检查的安全版本,推荐使用。
五、函数strcmp与strncmp
- 注意:
- 比较字符串大小,实际上比较的是字符的 ASCII码值的大小。
- 从左到右逐个比较两个字符串的每一个字符,当能“决出胜负”时立刻停止比较。
printf("%d\n", strcmp("abc", "abc")); // 输出0,两个字符串相等
printf("%d\n", strcmp("abc", "aBc")); // 输出1,"abc" 大于 "aBc"
printf("%d\n", strcmp("999", "aaa")); // 输出-1,"999" 小于 "aaa"
六、函数strcat与strncat
- 注意:
a.这两个函数的功能,都是将 src 中的字符串,复制拼接到 dest 的末尾。
b.strcat() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
c.strncat() 有边界控制,最多复制 n+1 个字符(其中最后一个是 ‘\0’ )到 dest 的末尾。
char s1[10] = "abc";
strcat(s1, "xyz");
printf("%s\n", s1); // 输出 "abcxyz"
char s2[10] = "abc";
strcat(s2, "123456789"); // 此处操作内存溢出,可能会发生内存崩溃
char s[10] = "abc";
strncat(s, "123456789", sizeof(s)-strlen(s)-1);
printf("%s\n", s); // 输出 "abc123456",两个字符串被拼接到了一起,且不会溢出
strncat()是具备边界检查的安全版本,推荐使用。
七、函数strtok
- 注意:
a.该函数会将改变原始字符串 str,使其所包含的所有分隔符变成结束标记 ‘\0’ 。
b.由于该函数需要更改字符串 str,因此 str 指向的内存必须是可写的。
c.首次调用时 str 指向原始字符串,此后每次调用 str 用 NULL 代替。
char s[20] = "www.123456.com.cn";
char *p = strtok(s, "."); // 首次调用时,s 指向需要分割的字符串
while(p != NULL)
{
printf("%s\n", p);
p = strtok(NULL, "."); // 此后每次调用,均使用 NULL 代替。
}
上述代码的运行结果就是将字符串 s 拆解为"www"、“123456”、“com” 和 “cn”