6

我认为这是第一个失败的 strtok 调用。自从我写C以来已经有一段时间了,我很茫然。非常感谢。

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {
  char *str = "one|two|three";

  char *tok = strtok(str, "|");

  while (tok != NULL) {
    printf("%s\n", tok);
    tok = strtok(NULL, "|");
  }

  return 0;
}
4

3 回答 3

7

字符串文字应分配给 const char*,因为修改它们是未定义的行为。我很确定 strtok 修改了它的论点,这将解释你看到的坏事。

于 2010-12-18T22:41:50.317 回答
2
于 2010-12-18T22:46:56.260 回答
0

我不确定什么是“总线”错误,但如果您想继续解析相同的字符串,则循环中 strtok() 的第一个参数应该为 NULL。

否则,您将继续从同一个字符串的开头开始,顺便说一下,在第一次调用 strtok() 之后,该字符串已被修改。

于 2010-12-18T22:46:55.993 回答