请问做网站需要什么软件,长沙如何优化排名,怎么查看网站开发使用什么技术,可口可乐营销策划方案#x1f4dd;前言#xff1a; 上一篇文章C语言——字符函数和字符串函数#xff08;二#xff09;对字符函数和字符串函数strstr#xff0c;strcmp和strncmp进行了一定的讲解 这篇文章主要讲解以下函数的用法: 1#xff0c;strtok 2#xff0c;strerror 3#xff0c;pe…前言 上一篇文章C语言——字符函数和字符串函数二对字符函数和字符串函数strstrstrcmp和strncmp进行了一定的讲解 这篇文章主要讲解以下函数的用法: 1strtok 2strerror 3perror 个人简介努力学习ing 个人专栏C语言入门基础 CSDN主页 愚润求学 每日鸡汤知不足而奋进望远山而前行 文章目录 一strtok的使用1strtok初步了解2注意事项3返回值的不同情况1strtok的参数1不为NULL2strtok的参数1为NULL3字符串中不存在更多标记 二strerror的使用三perror的使用 一strtok的使用
1strtok初步了解
我们先来看一下官网对它的介绍 提取出它的函数原型char * strtok ( char * str, const char * delimiters ); ①我们先分别理解这里面的参数与返回类型 ●参数1str是需要分割的字符串 ●参数2delimiters是用来分割的分割符的集合 ●返回返回一个指针下面会讲解具体的返回情况
②strtok的功能是根据delimiters里面的分隔字符把 str分割成不同的标记这些标记是由分隔符中的任何字符分隔的连续字符序列。 可能有点抽象下面我举个例子 比如我们要分割“zhangsan163.com”这一个字符串 请看下面的代码 #includestdio.h
#includestring.h
int main()
{char arr[] zhangsan163.com;char str[3] { .,};printf(%s, strtok(arr, str));return 0;
}这里面arr是我们分割的字符串str是分隔字符的集合 正常流程就是用str中的分隔字符把arr分成:zhangsan,163,com这几个标记
但是当我们运行输出结果 通过这个结果我们可以猜测printf应该是从z这个首地址开始打印但是打印完zhangsan就停止了 是不是这样呢当我们了解了strtok的返回和注意事项就会理解
2注意事项
strtok函数在找到str中的下一个标记的时候会将标记用‘\0’结尾即可能会替换掉这个标记结尾的分隔符 请看 显而易见当这一次strtok被调用后找到了第一个标记zhangsan然后把张三后面的换成了\0 总之strtok函数会改变被操作的字符串因此在我们使用strtok分割字符串时可以先把字符串拷贝一份对拷贝的那一份进行操作这样就不会造成原来的字符串丢失。
3返回值的不同情况
在这里返回情况可以分为三类 1strtok的参数1不为NULL 2strtok的参数1为NULL 3字符串中不存在更多标记
1strtok的参数1不为NULL
这时候函数会找到str中的第一个标记然后以\0将它结尾并且记住这个标记结束后的位置然后返回一个指向这个标记起始位置的指针 继续看上面用到的例子
#includestdio.h
#includestring.h
int main()
{char arr[] zhangsan163.com;char str[3] { .,};printf(%s, strtok(arr, str));return 0;
}在这个例子里strtok函数返回了zhangsan的起始位置z随后printf从z位置开始打印遇到了被strtok修改成的\0于是停止了打印
2strtok的参数1为NULL
当strtok的参数为NULL时函数就会从同一个字符串中被保留的位置即上一个标记结束后的位置开始查找下一个标记当找到标记后依然是以\0将这个标记结尾并且记住这个标记结束后的位置然后返回一个指向这个标记起始位置的指针
请看下面的代码依旧是要实现分割“zhangsan163.com”这一个字符串
#includestdio.h
#includestring.h
int main()
{char arr[] zhangsan163.com;char str[3] { .,};char* ptr NULL; //用ptr接收返回的指针for (ptr strtok(arr, str); ptr ! NULL; ptr strtok(NULL, str)) {printf(%s\n, ptr); //用ptr接收的地址打印}//用for循环可以实现第一次传入strtok的arr// 然后传入strtok的都是NULLreturn 0;
}输出结果 arr的变化 第一次strtok返回z的地址且strtok把改成\0ptr接收到了z的地址 第二次strtok返回1的地址且把.改成\0ptr接收了1的地址 第三次strtok返回c的地址且把\0改成\0通俗理解ptr接收了c的地址 然后根据ptr这些地址分别打印出了这些标记 那第四次com之后找不到标记了呢
3字符串中不存在更多标记
当字符串中不存在更多标记时函数就会返回NULL指针这也就是为什么上面的例子中for循环的进入条件是ptr ! NULL
二strerror的使用
头文件errno.h strerror是一个传入错误码作为参数返回参数部分错误码对应的错误信息的字符串地址的函数
先简单了解什么是错误码 C语言程序启动的时候如果程序出现问题会返回一个错误码这个错误码会被记录到errno这个全局变量中 不同的错误码都对应着不同的错误信息
使用展示
#include stdio.h
#include errno.h
#include string.h int main() {FILE* file fopen(nonexistent_file.txt, r);if (file NULL) {printf(Error opening file: %s\n, strerror(errno));return 1; // 返回错误码 }// ...其他代码... fclose(file);return 0; // 返回0表示成功
}输出结果 在这个例子中如果文件打开失败fopen函数会返回NULL并且errno会记录一个表示具体错误的值。 我们使用strerror函数就可以得到错误码对应的错误信息的地址然后打印出来。 三perror的使用
perror函数也是一个用来打印错误码的函数 通过接受一个字符串作为参数并把它作为错误消息输出到标准错误流 同样是上面的代码我们修改一下用perror
#include stdio.h
#include errno.h
#include string.h int main() { FILE *file fopen(nonexistent_file.txt, r); if (file NULL) { perror(Error opening file); return 1; // 返回错误码 } // ...其他代码... fclose(file); return 0; // 返回0表示成功
}输出结果是完全一样的perror的不同就在于它打印完参数部分的字符串后在打印一个:和一个 空格接着打印错误信息。 我的分享也就到此结束啦 要是我的分享也能对你的学习起到帮助那简直是太酷啦 若有不足还请大家多多指正我们一起学习交流 公主王子点赞→收藏⭐→关注 感谢大家的观看和支持祝大家都能得偿所愿天天开心