strtok函数

发布时间 2023-04-18 10:44:05作者: 时间在哪
  • 函数原型
char *strtok (char * str, const char *delim)
  • 头文件
string.h
  • 函数作用
将str字符串中与delim相同的子字符串替换成 ' \ 0 ',然后返回str的首元素地址。(strtok会修改str字符串内容)
  • 使用
第一种情况:str字符串中没有delim子字符串。
void main()
{
    char str[] = "123\n456\n789\n";
    char tmp[] = "abc";
    char *p = strtok(str, tmp);
    if(p)
    {
        printf("str: %s\n", p);
    }
    printf("str: %s\n", str);
}
结果:

结论:str字符串中没有delim子字符串时,不会修改str字符串,strtok函数返回str字符串。
第二种情况:str字符串中只有一个delim子字符串。
void main()
{
    char str[] = "123\n456789";
    char tmp[] = "\n";
    int len = strlen(str);
    print(str, len); // 将str中的每个元素按照十六进制打印
    char *p = strtok(str, tmp);
    if(p)
    {
        printf("str: %s\n", p);
    }
    printf("str: %s\n", str);
    print(str, len); // 将str中的每个元素按照十六进制打印
}
结果:

结论:strtok会将str中的delim子字符串替换成'\0'。
第三种情况:str字符串中有多个delim子字符串。
void main()
{
    char str[] = "123\n456\n789\na";
    char tmp[] = "\n";
    int len = strlen(str);
    print(str, len);
    char *p = strtok(str, tmp);
    while(p)
    {
        printf("p: %s\n", p);
        p = strtok(NULL, tmp);
    }
    printf("str: %s\n", str);
    print(str, len);
}
结果:

结论:每次调用strtok都会将字符串中的delim子字符串给替换掉,需要注意的是strtok函数的返回值和第一个参数,首次调用strtok需要传入str字符串,非首次调用只需传入NULL,这是因为strtok会记录之前传过的字符串。