[英]In C - While Loop Exit issue during usage of strtok
我嘗試使用 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;
}
在調用strcpy
復制到您的數組之前,您必須始終確保strtok
的返回不是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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.