【发布时间】:2014-02-05 10:53:04
【问题描述】:
当我在 Linux x64 下编译代码时(在 x86 下没有警告),我收到以下警告 warning: format ‘%llx’ expects argument of type ‘long long unsigned int *’, but argument 3 has type ‘off64_t *’ [-Wformat]
我的代码 sn-p:
if(maps && mem != -1) {
char buf[BUFSIZ + 1];
while(fgets(buf, BUFSIZ, maps)) {
off64_t start, end;
sscanf(buf, "%llx-%llx", &start, &end);
dump_region(mem, start, end);
}
}
我应该如何将它投射到没有警告?
编辑:
我应该这样投射吗?:
sscanf(buf, "%llx-%llx", (long long unsigned int *)&start, (long long unsigned int *)&end);
【问题讨论】:
-
使用
PRIu64而不是 %llx -
检查this如何使用它是一个宏。
-
类似
sscanf(buf, "%"PRIu64"-%"PRIu64, &start, &end);的东西?编译时没有警告,但代码现在不起作用。 -
是的,但是缓冲区中有什么,请注意您在 scanf 中使用了
-,这就是我没有发布答案的原因。buff应为"3223-2254" -
@Grijesh Chauhan 对于类型 >= sizeof(int),我希望格式相同。也许不适合较小的类型?没有方便的链接。