C: warning: format %lx expects argument of type uint64_t {aka long long unsigned int} %llx

这个警告的意思是:%lx这个格式对应的数据类型是uint64_t,也就是long long unsigned;
[root@vmtca-2101 test]# gcc warning.c -m32 -Wall
warning.c: In function ‘main’:
warning.c:25:17: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘uint64_t’ {aka ‘long long unsigned int’} [-Wformat=]
printf(“abc= %lx\n”, xia);
~~^ ~~~
%llx

对应32位的程序,如果写出以下的代码,可能出现的情况是,后面想要打印的b值,输出的却是0;0是a的高地址内存地址存放的一个值。原因是,对应32位程序来说,%lx对应的是一个4字节内存,所以第一个%lx消耗掉4个字节,而变量a的内存是8个字节,没有消耗完,导致第二个%lx吃掉没有消耗完的a的内存4个高地址字节。

uint64_t a, b=1L;
memcopy(&a, “1234”, 4);
printf(“a = %lx, b= %lx\n”, a, b)

猜你喜欢

转载自blog.csdn.net/qq_36428903/article/details/129998388