2012-11-18 26 views
0

這不等於:fgets有什麼作用?

fgets (answer, 256, stdin); 

if (strncmp(answer, "sta", 4) == 0) 
    printf("omg, it's equal"); 

此代碼:

fgets (answer, 4, stdin); 

if (strncmp(answer, "sta", 4) == 0) 
    printf("omg, it's equal"); 

爲什麼?這是因爲在第一個答案中,我猜在第四個答案中沒有「0」(如果我將其更改爲3而不是4,它會起作用)。但是fgets有什麼作用?第一個字符串答案是str \whitespace*253\0"?而在第二個是str\0?謝謝。

回答

4

fgets(與gets不同)包括尾行\n,對應於在行結束處按下的返回。如果將3作爲限制,則會截斷該字符串,從而丟棄\n

從手冊頁:

fgets()在至多一個小於從流大小的字符和 存儲讀取它們到緩衝器通過s指向。讀取在 EOF或換行符後停止。如果讀取換行符,則將其存儲到緩衝區中。 終止空字節('\0')存儲在 緩衝區中的最後一個字符之後。