printf总是打印0

好久没用 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);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容