个人技术分享

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函数将错误码转换为对应的错误信息字符串,并打印出来。