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