簡體   English   中英

需要放入有限長度的字符串的函數無法正常工作

[英]Function that needs to putt limited length strings doesn't work well

我已經創建了這個函數:

void getWords(int words){
    int remaining, error=0;
    char word[WORD_MAX+1], def[DEF_MAX+1];

    for(remaining = words;remaining > 0;remaining--){
        do{
            printf("Enter definition #%d out of %d:\n",((words+1) - remaining),words);
            gets(word);
            if(strlen(word) > WORD_MAX){
                error = 1;
                printf("\nError! '%s' contains %d characters | Maximum allowed: %d | Please try again...\n\n",word,strlen(word),WORD_MAX);
            }
        }while(error);
    }
}

它會執行它應做的基本工作,檢查字符串長度是否最多為“ WORD_MAX”個字符,如果不要求用戶再次執行此操作,我的問題是:

當我使用WORD_MAX為3進行測試並嘗試編寫一個6個字符長的字符串時,它可以正常工作,但是當我嘗試編寫一個非常長的字符串(例如20個字符長)時,它只寫了一些單詞,並帶有一些奇怪的ascii最后是笑臉,而“剩余”變量包含我要求函數輸入的單詞數,它會得到一些垃圾值,並且破壞了整個程序,為什么這樣做呢?

謝謝!

您已經注意到,沒有辦法避免使用gets緩沖區溢出。 或者,您可以使用fgets

fgets(word, WORD_MAX+1, stdin);

從其手冊頁

char * fgets(char * s,int size,FILE * stream);
fgets()最多從流中讀取小於大小的字符,並將它們存儲到s所指向的緩沖區中。

暫無
暫無

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

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