【发布时间】:2020-09-11 11:12:06
【问题描述】:
我正在处理包含大量数字(磁盘偏移)的文件,并且在使用 scanf 为 %lli 时遇到了问题 - 数字的格式为 0x... 但 scanf 没有读取所有位。
这是示例代码(我在 https://www.onlinegdb.com/online_c_compiler 上测试过)。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* str = malloc(30);
unsigned long long l;
sprintf(str, "0x%llx\n", 0xffffffffffffffffULL);
printf("%s\n", str);
sscanf(str, "%lli", &l);
printf("%llx\n", l);
return 0;
}
它输出:
0xffffffffffffffff
7fffffffffffffff
而我希望两个数字相等。
如果我使用 %llx 说明符,它可以正常工作,但我不想将自己限制为十六进制格式的数字。
【问题讨论】:
-
@png 谢谢 - 它可以工作,但我一次扫描多个令牌。这会使我的所有代码复杂化。
-
最好使用
snprintf()而不是sprintf()来避免溢出。
标签: c scanf unsigned unsigned-integer