簡體   English   中英

c-strtok和while循環終止問題

[英]c - strtok and a while loop termination issue

基本上,每次遇到空白時,我試圖將用戶輸入連接到char數組(源)的數組中。 換句話說,如果sourceHold包含“祝您生日快樂”,則源的數組內容將為“ happy”(在0),“ birthday”(在1),“ to”(在2),“ you”(在3)。 sourcesTag保存char數組的當前索引。 我一直在退出循環時出錯(代碼始終在完全退出循環之前會中斷。最后的“ LOOP EXIT”打印行從不打印。在那里放置測試有什么問題。為什么我的循環不會終止?猜測這是因為在對整個輸入字符串進行標記后,while語句未正確終止,但是什么是好的語句?

while(sourceHold != NULL)
    {
        if(sourceHold[0] == '\n')
            break;

        printf("%s \n", sourceHold);

        strcpy(sources[sourcesTag], strtok(sourceHold, " "));
        sourcesTag++;

        strcpy( sourceHold, strtok(NULL, "\n"));
    } 
    printf("LOOP EXIT");
while(sourceHold != NULL)

循環中的任何內容都不會更改sourceHold

strcpy( sourceHold, strtok(NULL, "\n"));

確保break條件

if(sourceHold[0] == '\n')

永遠不會遇到,因為strtok'\\0'覆蓋'\\n' (如果有的話)。

所以,是的,您有一個無限循環,添加一個check sourceHold[0] != 0應該可以解決該問題。

但是,最好有一個指針

char *tok = strtok(sourceHold, " ");
while(tok != NULL) {
    strcpy(sources[sourcesTag++], tok);
    tok = strtok(NULL, " \n");
}

避免產生可疑的strcpy(sourceHold, strtok(NULL, "\\n"));

看一下手冊頁

首次調用strtok()時,應在str中指定要解析的字符串。 在每個隨后的應解析相同字符串的調用中,str應該為NULL。

您需要使用sourceHold調用一次,然后所有其他調用都應使用NULL進行調用。 也許像這樣:

    strcpy(sources[sourcesTag], 
           strtok(0 == sourcesTag ? sourceHoldPtr : NULL, " "));
    sourcesTag++;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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