nat123做网站 查封,杭州学编程哪里的培训机构好,音乐外链生成网站怎么做,莱芜都市网直播strstr函数
函数介绍 strstr 用于在一个字符串中查找另一个字符串的首次出现。
我们来看这个函数的参数名字#xff1a;haysytack#xff08;干草堆#xff09;needle#xff08;针#xff09;,这个其实就是外国的一句谚语#xff1a;在干草堆中找一根针#xff0c;就…strstr函数
函数介绍 strstr 用于在一个字符串中查找另一个字符串的首次出现。
我们来看这个函数的参数名字haysytack干草堆needle针,这个其实就是外国的一句谚语在干草堆中找一根针就类似于我们中国的大海捞针一样很有趣。也在某种程度上对应了这个函数的用途。
示例
char *s abcd.txt;
char *p strstr(s, .wps);if(p NULL)printf(文件[%s]不是WPS文件\n, s);
elseprintf(文件[%s]是WPS文件\n, s);
strchr函数和strrchr函数
函数介绍 这两个函数的功能都是在指定的字符串 s 中试图找到字符 c。strchr() 从左往右找strrchr() 从右往左找。都是查找某个字符的首次出现字符串结束标记 ‘\0’ 被认为是字符串的一部分。
示例
char *p;p strchr(www.qq.com, .); // 从左到右找到第一个出现的字符.
printf(%s\n, p); // 输出 .qq.comp strrchr(www.qq.com, .);// 从右到左找到第一个出现的字符.
printf(%s\n, p); // 输出 .com strstr是否可以替代strchr
相似点strstr 和 strchr 都可以在字符串中查找特定的内容并返回指向该内容在字符串中位置的指针。不同点strstr 查找子字符串而 strchr 查找单个字符。
从技术上讲你可以用 strstr 来替代 strchr 的功能因为 strstr 可以查找单个字符组成的子字符串。
虽然 strstr 可以用来查找单个字符组成的字符串从而实现与 strchr 类似的功能但在实际应用中strchr 更加简洁和直接地用于查找单个字符。因此虽然 strstr 可以囊括 strchr 的功能但在需要查找单个字符时通常推荐使用 strchr以使代码更具可读性和表达力。 strlen函数
函数介绍 示例
char *s www.baidu.com.cn;
printf(百度官网地址的长度是%d\n, strlen(s));
且我们的是返回字符长度不是总空间的大小和sizeof操作符不一样。 strcmp函数和strncmp
函数介绍 它可以帮助我们比较指针指向的字符串的大小
比较字符串大小实际上比较的是字符的 ASCII码值的大小。从左到右逐个比较两个字符串的每一个字符当能“决出胜负”时立刻停止比较。
示例
printf(%d\n, strcmp(abc, abc)); // 输出0两个字符串相等
printf(%d\n, strcmp(abc, aBc)); // 输出1abc 大于 aBc
printf(%d\n, strcmp(999, aaa)); // 输出-1999 小于 aaaprintf(%d\n, strcmp(abcd, abce)); // 输出-1abcd 小于 abce
printf(%d\n, strcmp(abcd, abce,3 )); // 输出0abcd 和 abce前三个字符一样 char a[]abc;char b[]bc;printf(%d\n, strcmp(a, b)); // 输出-1a指向的字符串b指向的字符串// if(ab){//这样是不行的因为这样是比较了我们指针指向的地址的大小是否相等
// printf(%s,same);
// }
// else{
// printf(%s,not same);
// }
//手写代码if(*a*b){printf(%s,ab);}if(*a*b){printf(%s,ab);}if(*a*b){printf(%s,ab);}
1.比较字符串并不要求两个字符串一样长。zaabcde abcab
2.strlen可以帮助我们由指针来直接比较指向内容的字符串大小不用解引用并且比手写代码比较更加简洁 strtok函数
函数介绍 1.当strtok在参数s的字符串中发现到参数sep的分割字符时则会将该字符改为’\0’字符
2.在第一次调用时strtok必须赋予参数str字符串往后的调用则将参数s设置成NULL并且要赋予分隔符串比如分隔符串,; 这里便包含了三个分割符表示str中的这三种符号都将会被视作分割标识我们的strtok函数将会将字符串中的这三种符号都换为’\0’。
3.在这里要分割字符串str我们每次调用strtok的话首先会返回的是指向第一个分割串的指针调用第二次的话返回的是指向第二个分割串的指针直到最后返回NULL表示分割完成。
4.strtok会修改原字符串所以原字符串必须可修改所以第一个参数不能用指向字符串常量的指针来作为参数因为字符串常量中的内容不能改变必须使用字符数组来存储我们要分割的字符串。
示例将分割好的字符串按行打印 1.这里采用while是非常合适的.
2.这里假如不定义字符数组而是定义了char *s abcd,1234,xy;888,666 999那么将得不到正确的结果上面也说过了这个函数必须可以修改原来的字符串。对于字符串常量的话我们对其是不可以修改的。所以这里必须定义的是字符数组。
3.strtok 函数的行为是它会将连续的分隔符视为一个分隔符而不会返回空的标记。
对于上面的s数组写成s[]abcd,,,,1234,xy;888,666 999这样也是得到相同的结果。 strcat函数和strncat函数更安全
函数介绍 这两个函数的功能都是将 src 中的字符串复制拼接到 dest 的末尾。strcat() 没有边界控制因此可能会由于 src 的过长而导致内存溢出。strncat() 有边界控制最多复制 n1 个字符其中最后一个是 ‘\0’ 到 dest 的末尾
示例
char s1[10] abc;
strcat(s1, xyz);
printf(%s\n, s1); // 输出 abcxyzchar s2[10] abc;
strcat(s3, 123456789); // 此处操作内存溢出可能会发生内存崩溃char s[10] abc;
strncat(s, 123456789, sizeof(s)/sizeof(char)-strlen(s)-1);
printf(%s\n, s); // 输出 abc123456两个字符串被拼接到了一起且不会溢出
1.有时候可能我们使用strcat来拼接了超过实际内存所能存储的字符我们输出了之后也正常输出没错误可能就有侥幸心理实际上这纯属偶然并且这就相当于埋下了一颗地雷指不定哪天就出错了所以更推荐使用strncat这个版本更加安全。
2.这里拼接操作很显然会改变字符数组存储的数据所以这里的第一个参数也必须是字符数组不能是一个字符串常量。 strcpy函数和strncpy函数更安全
函数介绍 这两个函数的功能都是将 src 中的字符串复制到 dest 中dest原本内容被覆盖。strcpy() 没有边界控制因此可能会由于 src 的过长而导致内存溢出。strncpy() 有边界控制最多复制 n1 个字符其中最后一个是 ‘\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)/sizeof(char)-1);
printf(%s\n, s); // 输出 1234有边界保护不会溢出
1.更推荐使用strncat这个版本更加安全。
2.这里的第一个参数也必须是字符数组原因还是这里我们需要对字符数组进行修改字符串常量是不能被修改的。