![](/img/trans.png)
[英]How can I use `scanf_s("%[^\n]s")` with a limit to the number of characters allowed? C
[英]C: “%n” (number of characters read) gets ignored by scanf_s
我想使用scanf
讀取一個string
並獲取實際的str長度,然后再重新realloc
它。 我已經讀過%n
給出了number of chars read
,所以這就是我需要的。 Visual Studio要求我使用scanf_s
,在每個字符串之后你必須指定它的緩沖區大小。
我寫:
int actual_length;
scanf_s("%[^\n]s%n", str, MAX_STRING_LEN, &actual_length);
printf("actual length = %d\n", actual_length);
我明白了:
actual length = -858993460
所以,當我添加這個%n
沒有發生任何事情。 如果我帶走了%n
它會說太多args,如果我帶走了&actual_length
那么它說的args太少了。 如果我帶走兩者,結果顯然是一樣的。
我嘗試谷歌40分鍾,我被卡住了。 MSDN沒有說明有關scanf_s處理%n
任何具體信息。
BLUEPIXY在評論中回答了這個問題:
“ %[^\\n]s%n
” - >“ %[^\\n]%n
”
在這種情況下, s
不正確。 s
是一個不是轉換說明符的名稱。 它被解釋為匹配的角色。 但是,由於實際上不存在匹配字符,因此輸入將在s
失敗。 所以%n
沒有被解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.