使用strtok()在c中将字符串标记两次

Sum*_*din 8 c csv tokenize strtok

strtok()在c中使用来解析csv字符串.首先我将它标记为只是找出有多少令牌,这样我就可以分配一个正确大小的字符串.然后我使用上次用于标记化的相同变量.每次我第二次这样做虽然它strtok(NULL, ",")返回,NULL即使还有更多的令牌需要解析.谁能告诉我我做错了什么?

char* tok;
int count = 0;
tok = strtok(buffer, ",");
while(tok != NULL) {
    count++;
    tok = strtok(NULL, ",");
}

//allocate array

tok = strtok(buffer, ",");
while(tok != NULL) {
    //do other stuff
    tok = strtok(NULL, ",");
}
Run Code Online (Sandbox Code Playgroud)

所以在第二个while循环中它总是在找到第一个标记后结束,即使有更多的标记.有人知道我做错了什么吗?

Fre*_*son 18

strtok()修改它操作的字符串,用空值替换分隔符.因此,如果您想多次使用它,则必须制作副本.

  • +1:这就是为什么使用`strtok()`毕竟往往不是一个好主意... (6认同)