簡體   English   中英

C:scanf_s忽略“%n”(讀取的字符數)

[英]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.

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