繁体   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