在 C 中 - 使用 strtok 期间出现 While 循环退出问题
In C - While Loop Exit issue during usage of strtok
我尝试使用 strtok 拆分字符串并在 2D 中存储单个单词 array.I 已放置 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;
}
在调用 strcpy
复制到您的数组之前,您必须始终确保 strtok
的 return 不是 NULL
。一个简单的重新排列将确保情况如此:
int wordBreak (char* str, char words[MAX_WORDS][MAX_WORD_LENGTH])
{
int x = 0;
const char *delimiters = " :,;\n";
char *token = strtok (str,delimiters);
while (x < MAX_WORDS && token != NULL) {
if (strlen (token) < MAX_WORD_LENGTH) {
strcpy (words[x++], token);
token = strtok (NULL, delimiters);
}
else
fprintf (stderr, "warning: token '%s' exeeded MAX_WORD_LENGTH - skipped\n",
token);
}
return x;
}
您还必须确保 x < MAX_WORDS
通过添加如上所示的附加条件和测试以确保 strlen(token) < MAX_WORD_LENGTH
在复制到您的阵列之前。
我尝试使用 strtok 拆分字符串并在 2D 中存储单个单词 array.I 已放置 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;
}
在调用 strcpy
复制到您的数组之前,您必须始终确保 strtok
的 return 不是 NULL
。一个简单的重新排列将确保情况如此:
int wordBreak (char* str, char words[MAX_WORDS][MAX_WORD_LENGTH])
{
int x = 0;
const char *delimiters = " :,;\n";
char *token = strtok (str,delimiters);
while (x < MAX_WORDS && token != NULL) {
if (strlen (token) < MAX_WORD_LENGTH) {
strcpy (words[x++], token);
token = strtok (NULL, delimiters);
}
else
fprintf (stderr, "warning: token '%s' exeeded MAX_WORD_LENGTH - skipped\n",
token);
}
return x;
}
您还必须确保 x < MAX_WORDS
通过添加如上所示的附加条件和测试以确保 strlen(token) < MAX_WORD_LENGTH
在复制到您的阵列之前。