需要将一个字符串分隔开,然后进行另一次分隔。
char *token = strtok(str, ",");
while(token){
char *current_string = malloc(sizeof(char) * strlen(token));
strcpy(current_string, token);
char *tk = strtok(current_string, ":"); // KEY
printf("key: %s ", tk);
tk = strtok(0, ":"); // VALUE
printf("value: %s\r\n", tk);
printf("%s\n", token);
token = strtok(0, ",");
}
printf("Done\n");
尝试复制 token
的内容,但这样做会干扰 token
变量中剩余的内容。它只处理了一个行而不是应该处理的三个行。我怀疑问题出在 strcpy(current_string, token)
上,但不确定我应该如何解决它。
strtok
不可重入,这就是为什么被注释为// KEY
的那一行代码“干扰了剩余部分”的原因。有一个可重入版本的函数可用,也许叫做strtok_r
或strtok_s
。这些函数在由调用者提供的变量中存储当前状态,而不是在内部使用static
变量。 - Weather Vanewhile
的前两行中,您还有未定义的行为。 您需要一个额外的元素来终止空字符。char *current_string = malloc(strlen(token) + 1);
- R Sahustrdup
代替malloc
来复制一个字符串。 - Dan Kornmalloc()
在标准C库中,但遗憾的是strdup()
并不在其中。 - chux - Reinstate Monica