在GCC中使用sscanf解析64位整数的兼容方式

bq8i3lrv  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(213)

我用gcc -ansi -pedantic -Wall test.c编译了下面的**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

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

kkbh8khc

kkbh8khc1#

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

kpbwa7wx

kpbwa7wx2#

您可以在<inttypes.h>中使用宏SCNu64PRIu64,例如,它们可以是

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

相关问题