strtok函数
strtok函数是C语言中的一个字符串函数,用于将一个字符串根据特定的分隔符拆分成多个子字符串。它的函数原型如下:
char *strtok(char *str, const char *delim);
在这个函数中,str表示要进行拆分的字符串,delim表示分隔符。
函数的返回值是一个指针,指向拆分得到的第一个子字符串。返回的指针可以作为下一次调用strtok函数的第一个参数,来继续拆分剩余的子字符串。
如果没有找到分隔符,或者传入的字符串为空,则返回NULL。
例如,我们可以使用strtok函数将一个字符串按照逗号分隔符拆分成多个子字符串:
#include <stdio.h>
#include <string.h>int main() {char str[] = "apple,banana,grape,orange";const char delim[] = ",";char *token = strtok(str, delim);while (token != NULL) {printf("%s\n", token);token = strtok(NULL, delim);}return 0;
}
上述代码输出为:
apple banana grape orange
在每一次调用strtok函数时,它会将找到的分隔符替换为字符串结束符'\0',并返回当前拆分得到的子字符串的指针。
在下一次调用strtok时,如果传入的第一个参数为NULL,则会继续从上次拆分的位置开始找下一个分隔符。若不存在标记,就返回空指针
我们可以看个例子
#include<stdio.h>
#include<string.h>
int main() {char str[] = "abc@def.efg";char str1[50] = { 0 };strcpy(str1, str);const char* sep = "@.";printf("%s\n", strtok(str1, sep));//打印分隔符分开的第一部分printf("%s\n", strtok(NULL, sep));//打印分隔符分开的第二部分printf("%s\n", strtok(NULL, sep));//打印分隔符分开的第三部分
}
运行结果
需要注意的是,strtok函数会修改原始字符串,因此在使用时需要小心,尽量不要在同一个字符串上多次使用strtok函数。
perror函数
perror函数是C语言中的一个函数,用于输出与errno相关的错误信息。它接受一个字符串作为参数,该字符串会在错误信息之前输出,然后再输出与errno相关的错误信息。
以下是perror函数的语法:
#include <stdio.h>
#include<errno.h>
void perror(const char *str);
参数str是一个字符串,用于在错误信息之前输出。如果str为NULL,则只输出与errno相关的错误信息。
perror函数会根据errno的值输出相应的错误信息。errno是一个全局变量,它的值通过调用系统函数得到,表示最近发生的错误代码。原型位于头文件errno.h
示例:
#include <stdio.h>
#include <errno.h>int main() {FILE *file;file = fopen("nonexistent.txt", "r");if (file == NULL) {perror("Error");}return 0;
}
以上代码尝试以只读模式打开一个不存在的文件,并使用perror函数输出错误信息。
输出结果可能类似于:
Error: No such file or directory。
我们经常在动态内存分配的时候使用它
int* a=(int*)malloc(sizeof(int)); if(a==NULL) { perror("malloc fail"); exit(-1); }
strerror函数
在C语言中,strerror函数用于将错误码转换为对应的错误信息字符串。
函数原型:
char *strerror(int errnum);
参数errnum是一个整数,表示错误码。通常填error,这被包含在头文件<errno.h>中
返回值是一个指向错误信息字符串的指针。该字符串包含错误码对应的错误信息。
示例:
#include <stdio.h>
#include <string.h>
#include <errno.h>int main() {// 打开一个不存在的文件FILE *fp = fopen("non_existent_file.txt", "r");if (fp == NULL) {// 获取errno的错误信息字符串char *error_msg = strerror(errno);printf("Error: %s\n", error_msg);}return 0;
}
输出:
Error: No such file or directory
这个例子中,我们尝试打开一个不存在的文件,因此会返回一个错误码,通过strerror函数将错误码转换为对应的错误信息字符串,并打印出来。