函数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= "https://www.csdn.net/”;
printf("CSDN官网地址的长度是: %d\n",strlen(s));
函数strtok
注意:
a.该函数会将改变原始字符串 str,使其所包含的所有分隔符变成结束标记’\0'
b.由于该函数需要更改字符串str,因此str 指向的内存必须是可写的
c.首次调用时 str 指向原始字符串,此后每次调用str 用 NULL代替
char s[20] = "www.csdn.net/";
char *p = strtok(s,"."); // 首次调用时,s 指向需要分割的字符串
while(p != NULL)
{
printf("%s\n",p);
p = strtok(NULL,"."); // 此后每次调用,均使用 NULL 代替
}
注:上述代码的运行结果就是将字符串s 拆解为"www”、“csdn”和“net”
函数strcat与strnact
注意:
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(s3,"123456789"); // 此处操作内存溢出,可能会发生内存崩溃
char s[10] ="abc";
strncat(s,"123456789",sizeof(s)-strlen(s)-1);
printf(”%s\n”,s); // 输出abc123456",两个字符串被拼接到了一起,且不会溢出
注意: strncat()是具备边界检查的安全版本,推荐使用
函数strcpy与strncpy
注意
a.这两个函数的功能,都是将 src 中的字符串,复制到 dest 中
b.strcpy()没有边界控制,因此可能会由于src 的过长而导致内存溢出
c.strncpy0)有边界控制,最多复制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")); // 输出,两个字符串相等printf("%d\n",strcmp("abc","aBc")); // 输出1"abc”大于"aBc"
printf("%d\n",strcmp("999","aaa")); // 输出-1,"g99”小于aaa
函数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