Skip to content
On this page

strtok() 和 strsep()


标签:linux/api  

都是用来进行字符串切割的函数。

strtok

功能:将字符串分割为若干个子串

cpp
char *strtok(char *str, const char *delim)
  • 参数:
    • str:需要分割的字符串
    • delim:分割符,可以为包含多个字符的字符串
  • 返回值:
    • 返回一个指向下一个子串的指针,如果没有子串返回 NULL

注意事项

  • 在第一次调用该函数时,需要使用字符串作为第一参数。在同一个源字符串上多次调用此函数时,第一个参数应为 NULL。
  • 在第一次调用时,可以存储返回指针以备后续调用使用。例如:char *token = strtok(str, delim);,以后的调用可以使用 strtok(NULL, delim); 来继续切分该字符串。
  • 原字符串会被修改,被分割的子串会被空字符'\0'替换掉。

使用示例

cpp
char str[] = "hello,world";
char *token = strtok(str, ",");
while(token != NULL) {
    printf("%s\n", token);
    token = strtok(NULL, ",");
}

输出结果:

hello
world

strsep()

和 strtok() 一样,但它返回的指针指向分隔符后面的第一个字符,因此,使用 strsep 的时候,需要在切分之前判断返回的指针是否为NULL,以确保字符串被完全切分。

The strsep() function was introduced as a replacement for strtok(3), since the latter cannot handle empty fields. However, strtok(3) conforms to C89/C99 and hence is more portable.

Last updated: