簡體   English   中英

在 C - 使用 strtok 期間出現循環退出問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM