5

我编译了以下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

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

4

2 回答 2

7

空无一人。C 90 中最大的整数类型是long,仅保证至少为 32 位。由于没有保证至少为 64 位的整数类型,因此在 C90 中也无法读取 64 位整数。当然,long 可能是 64 位(它至少在一种实现中已经出现,但不能确定它是。

于 2013-07-04T04:41:11.690 回答
-1

您可以使用宏SCNu64,例如,它们可以PRIu64<inttypes.h>

sscanf(argv[1],"%" SCNu64,&num);
sprintf(str,"%" PRIu64,num);
于 2021-01-12T08:57:22.793 回答