[英]Why sscanf() or strtoll() does not convert a hex string more than 9 bytes to hex number
[英]Why does sscanf read more than expected?
sscanf
支持%n
计算读取的字节数。
为什么 sscanf 有时会读取额外的字节?
#include <stdio.h>
int main()
{
char *data = "X\n \n\x09\n \x10\n";
int len = 0;
sscanf(data, "X%n", &len);
printf("%i\n", len);
sscanf(data, "X\n%n", &len);
printf("%i\n", len);
return 0;
}
该程序打印:
1
7
我希望:
1
2
(1 代表X
和 2 代表X\n
。)
为什么它读取的字节数比预期的多?
从cppreference :
格式字符串包括
除 % 以外的非空白多字节字符:格式字符串中的每个此类字符都使用来自输入 stream 的完全相同的字符,或者如果 ZF7B44CFAFD5C52223D54988E 上的下一个字符不相等,则导致 function 失败。
空白字符:格式字符串中的任何单个空白字符都会消耗输入中所有可用的连续空白字符(就像在循环中调用 isspace 一样确定)。 请注意,格式字符串中的“\n”、“”、“\t\t”或其他空格之间没有区别。
因此,第二个格式字符串中的\n
将导致 function 消耗所有剩余的空白字符——这实际上是X
之后和0x10
之前的所有 6 个字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.