2017-08-29 56 views
0

從字面上看,現在只有兩個小時的學習時間。我每天在一小時內使用Sams Teach Yourself C,並且我僅僅停留在第2課的一個看似簡單的練習上。函數'fgets'的參數太少?

5.以下程序有什麼作用? (輸入,編譯和運行它。)

/* ex02-05.c */ 
#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
    char buffer[256]; 

    printf("Enter your name and press <Enter>:\n"); 
    fgets(buffer); 

    printf("\nYour name has %d characters and spaces!", 
        strlen(buffer)); 

    return 0; 
} 

所以書後說,最終的結果應該讓我進入和名稱,並把它告訴我的空間和人物的數量。但是,我收到一個錯誤,指出「在第9行上函數fgets的參數太少」?

+2

'fgets()'需要三個參數。時間。順便說一句:首先查找它期望的參數*的類型*。 – wildplasser

+0

https://linux.die.net/man/3/fgets – Kevin

+1

['fgets'](https://linux.die.net/man/3/fgets)需要3個參數。第一個是字符緩衝區,其中應該存儲檢索到的信息,第二個是要讀取的字符數,第三個是要從中讀取的字符串。 – yano

回答

4

這是本書中的錯誤。就像編譯器說的那樣,fgets()需要三個參數。

這可能是由於過度搜索和替換以代替fgets()來取代已棄用的gets()。什麼在這裏意爲兩種可能:

gets(buffer); 

時將產生最現代的編譯器警告,或

fgets(buffer, sizeof(buffer), stdin); 

正確的參數傳遞給fgets()

這個錯誤令人不安,因爲它表明本書的其他部分可能已經被不小心寫入或更新。仔細踩踏。

+0

.....或'fgets(buffer,sizeof buffer,stdin);' – chux