5

我正在将一些 C 结构序列化为字符串,而不是使用strtok(). 但是,不幸的是,strtok()不要检测空字段(例如 1:2::4)。

有没有替代功能?

4

3 回答 3

11

在 linux 上有strsep

strsep() 函数是作为 strtok() 的替代引入的,因为后者不能处理空字段。但是,strtok() 符合 C89/C99,因此更便携。

于 2010-03-04T08:28:08.903 回答
8

您可以使用strchr(仅用于一个分隔符) 或strcspn(用于一组可能的分隔符) 来查找下一个分隔符,处理令牌,然后向前移动一个字符。循环执行此操作,您就拥有了所需的东西。

于 2010-03-04T08:26:41.997 回答
0

德拉科沙给出了正确的答案。我想为这两种变体添加一个示例。

使用 strtok:

char *token;
char *tmp_string;
char delimiter[10] = " |,.:";
strcpy (tmp_string, "1:2::4");
token = strtok(tmp_string, delimiter); // first token
while(token != NULL) {
    i++;
    printf ("i=%d\tToken: len(%d)\t%s", i, strlen(token), token);
    // do something
    token = strtok(NULL, delimiter); /* next token */
}

使用 strsep(将识别“”):

char *token;
char *tmp_string;
char delimiter[10] = " |,.";
strcpy (tmp_string, "1:2::4");
token = strsep(&tmp_string, delimiter); // first token
while(token != NULL) {
    i++;
    printf ("i=%d\tToken: len(%d)\t%s", i, strlen(token), token);
    // do something
    token = strsep(&tmp_string, delimiter); /* next token */
}
于 2015-05-12T09:20:03.100 回答