使用带GCC的sscanf解析64位整数的兼容方法

时间:2013-07-04 04:37:11

标签: c gcc compiler-warnings ansi c89

我使用c编译了以下 gcc -ansi -pedantic -Wall test.c 计划:

#include <stdio.h>
#include <stdint.h>
#define  BUFFER 21
int main(int argc, char* argv[]) {
  uint64_t num = 0x1337C0DE;
  char str[BUFFER]; /* Safely Holds UINT64_MAX */
  if(argc > 1)
    sscanf(argv[1],"%llu",&num);
  sprintf(str,"%llu",num);
  return 0;
}

我收到以下警告:

test.c:8:5: warning: ISO C90 does not support the ‘ll’ gnu_scanf length modifier
test.c:9:3: warning: ISO C90 does not support the ‘ll’ gnu_printf length modifier

从字符串到字符串的解析/打印64位整数的正确,符合C90标准的方法是什么,
哪个不会产生这些警告?

2 个答案:

答案 0 :(得分:6)

没有。 C 90中最大的整数类型是long,它只保证至少为32位。由于没有保证至少为64位的整数类型,因此也无法在C90中读取64位整数。当然,long 可以是64位(它至少在一个实现中,但不确定它是什么。

答案 1 :(得分:-1)

您可以在 SCNu64 中使用宏 PRIu64<inttypes.h>, 对于您的示例,它们可以是

sscanf(argv[1],"%" SCNu64,&num);
sprintf(str,"%" PRIu64,num);