strtok()和空字段

时间:2010-03-04 08:20:32

标签: c strtok

我将一些C结构序列化为字符串,而不是使用strtok()对其进行反序列化。但是,遗憾的是,strtok()没有检测到空字段(例如1:2 :: 4)。

有没有替代功能?

3 个答案:

答案 0 :(得分:9)

在linux上有strsep

  

引入了strsep()函数   作为strtok()的替代品,因为   后者无法处理空   领域。但是,strtok()          符合C89 / C99,因此更便携。

答案 1 :(得分:6)

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

答案 2 :(得分:0)

Drakosha给出了正确的答案。我想为两个变体添加一个示例。

用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 */
}