【发布时间】:2020-07-08 04:01:20
【问题描述】:
我尝试使用 strtok 拆分字符串并将单个单词存储在 2D 数组中。我已经放置了 printf 语句并检查了单个单词是否正在被存储,并且看到单词正在被存储。 但问题是 while 循环根本不会终止,而执行它时不会打印退出语句“Hi”。 我在这里找不到错误。 有人可以帮我解决这个问题吗?
int wordBreak(char* str, char words[MAX_WORDS][MAX_WORD_LENGTH])
{
int x=0;
const char *delimiters = " :,;\n";
char* token = strtok(str,delimiters);
strcpy(words[x],token);
x++;
while(token!=NULL) {
token = strtok(NULL,delimiters);
strcpy(words[x],token);
x++;
}
printf("Hi\n");
return x;
}
【问题讨论】:
-
如果
char* token = strtok(str,delimiters);返回NULL会发生什么?你有几件事不正常。删除第一个strcpy(words[x],token);和x++;并将token = strtok(NULL,delimiters);移动到循环的末尾。 -
感谢 David C. Rankin。我做了你指定的更改,代码现在运行良好......
-
不客气——请记住,在编程中,尤其是在 C 语言中,您需要验证对程序持续运行至关重要的每个值或输入。每个函数的手册页都提供了关于正确使用、返回和错误条件的简明信息,您应该检查(一开始它们有点神秘 - 但您会意识到它们实际上是多么简洁和好)你的编码!
标签: c while-loop infinite-loop strtok