簡體   English   中英

scanf不會放置終止空字節

[英]scanf doesn't put a terminating null byte

我正在使用scanf函數從stdin讀取一個字符串。

char inputWord[100];
scanf("%99[^\n]", inputWord);

除了輸入序列中的第一個字符是換行符(通過按enter key )的情況外,這種方法很好。 當我使用strlen打印inputWord的長度時,它打印6(總是),當我打印inputWord字符串本身時,它會打印一些垃圾。 scanf man頁指出在輸入序列中的字符與排除字符集合的第一次匹配之后添加終止空字節,這里是[^\\n] 為什么在這種情況下不添加空字節? 是因為在這種情況下scanf無法匹配任何字符(返回值為零)?

我知道我應該使用fgets但我很想知道在這種情況下scanf的行為。 似乎scanf是一個函數的野獸。

在這種情況下, scanf()的返回碼將為0,因為它與轉換規范的任何內容都不匹配(因為轉換規范沒有匹配,nothign會寫入相應的變量)。

暫無
暫無

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

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