![](/img/trans.png)
[英]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.