我已經的大小的輸入通過許多職位上SO關於在scanf()
優選使用的fgets()
和gets()
。有的稱爲關於與fgets()man page。與fgets()不保留「 n」的陣列
再有就是this wonderful post表示利用作爲在手冊頁FGETS(描述中提到這個職位的答案strlen()
。一是通過fgets()
存儲的字符數)保留\n
(如果有的話),這就是爲什麼strlen()
函數返回text_size + 1。我試圖通過一個程序來測試它:
#include<stdio.h>
#include<string.h>
#define text_size 10
int main(void)
{
char str[text_size+1];
fgets(str,sizeof(str),stdin);
printf("%s",str);
printf("%d",strlen(str));
return 0;
}
當我大小比text_size
較小的輸入文本時,strlen(str)
返回值(text_size + 1)閱讀手冊頁,它保留了後是完全可以理解我文字後的\n
。如對實施例: -
INPUT:你好
OUTPUT:您好6(我想\ n被這裏保留)。
但是,當作爲text_size
或確切大小的I輸入文本甚至更大的尺寸由strlen(str)
返回的值等於(text_size),因此10被打印出來,不知爲什麼\n
此處丟棄?
輸入:helloworldhi
OUTPUT:HelloWorld的10(爲什麼這裏沒有返回11日以來1米字元的地方還是有的,這裏我就不明白它在這裏被賦予優先\0
或\n
字符和爲什麼???
我不是很肯定在C中的所有未定義的行爲,但我們可以把它叫做一個UB?
+1鏈接。謝謝!! – 0decimal0
確定然後printf()語句應該只打印文本大小爲1? – 0decimal0
@PHIfounder它應該在您的示例中打印最大尺寸爲-1的文本(或者更確切地說是'text_size')。 –