strtok和strerror函数的认识和使用
一、strtok函数
函数原型: char * strtok(char * str, const char *delim);strerror函数的使用需要包含头文件<string.h>
功能:
- 分割字符串:根据delim参数中指定的分隔符,将str字符串拆分为多个子字符串
- 修改原始字符串:strtok函数会直接在原始字符串中插入’\0’终止符,替换分隔符的位置,因此原始字符串会被修改
参数
- str:首次调用时传入未分割的字符串;后续调用传入NULL,表示继续分割同一个字符串
- delim:包含分隔符的字符串,用于定义如何分割原字符串
返回值
- 成功时返回指向当前字符串的指针
- 没有更多子字符串时返回NULL
代码演示:
#include<stdio.h>#include<string.h>intmain(){charch[]="192.168.6.111";constchar*sep=".";constchar*str=NULL;charbuf[30]={0};strcpy(buf,ch);str=strtok(buf,sep);printf("%s\n",str);str=strtok(NULL,sep);printf("%s\n",str);return0;}注意事项:
- 破坏性:strtok函数会直接修改原字符串,将其中的分隔符替换为’\0’,如果需要保留原字符串,应先拷贝一份
- 连续分隔符:多个连续的分隔符将会被视为单个分隔符,不会返回空字符串
- 空指针处理:如果输入的str为NULL且没有前序调用,行为未定义
二、strerror函数
2.1 strerror函数的认识和使用
函数原型:
char* strerror ( int errnum );strerror函数的使用需要包含头文件<string.h>
功能:
- strerror函数可以通过参数部分的errnum表示**错误码,**得到对应的错误信息,并且返回这个错误信息字符串的首字符地址
- strerror函数只针对标准库中的函数发生错误后设置的错误码的转换
参数:
- errnum:表示错误码
这个错误码⼀般传递的是 errno 这个变量的值,在C语⾔有⼀个全局的变量叫: errno ,当库函数的调⽤发⽣错误的时候,就会将本次错误的错误码存放在 errno 这个变量中,使⽤这个全局变量需要包含⼀个头⽂件 errno.h 。 - 返回值:函数通过返回错误码得到错误信息的字符串的首字符地址
代码演示:
//例1:#include<stdio.h>#include<string.h>#include<errno.h>intmain(){for(inti=0;i<=10;i++){printf("%d:%s\n",i,strerror(i));}return0;}在Windows11+VS2022环境下输出的结果为:
//例2:#include<stdio.h>#include<string.h>#include<errno.h>intmain(){FILE*pFile=NULL;//fopen函数以读的方式打开文件,如果文件不存在,则打开失败pFile=fopen("unexit.ent","r");if(pFile==NULL){printf("错误信息是:%s\n",strerror(errno));return1;//错误返回}return0;}输出结果:
2.2 perror函数的认识和使用
函数原型:
void perror ( const char * str );perror函数相当于一次将上述代码中的“printf(“错误信息是:%s\n”, strerror(errno));”完成了,直接将错误信息打印出来。perror函数打印完参数部分的字符串后,再打印一个冒号和空格,再打印错误信息。
代码演示:
#include<stdio.h>#include<string.h>#include<errno.h>intmain(){FILE*pFile=NULL;//fopen函数以读的方式打开文件,如果文件不存在,则打开失败pFile=fopen("unexit.ent","r");if(pFile==NULL){perror("错误信息是");return1;//错误返回}return0;}输出结果:
完
