好久没用 c 的 printf 输出了,然后今天调程序就遇到了一个奇怪的错误,如下:
long long n = 9999;
long long m = 8888;
printf("%d %d\n", n, m);
输出结果如下:
9999 0
想了好久都没有想出原因,最后试着增减参数,终于发现了问题。(后面才发现编译器的警告里都写清楚了,只是日常不看 warning ……)
原因
警告 C4477 “printf” : 格式字符串“ % d”需要类型“int”的参数,但可变参数 1 拥有了类型“__int64”
n 是 long long 类型,占8位!而 %d 是打印 int 整形数据的,int 只占四位,所以,第一个 %d 打印了 n 的低八位,第二个 %d 打印了 n 的高八位!(小端模式的情况下)
至于后面的 m ,直接被忽略掉了……
解决方法
直接把 %d 改成 %lld 就好了:
long long n = 9999;
long long m = 8888;
printf("%lld %lld\n", n, m);
网友评论