好久沒用 c 的 printf 輸出了疫粥,然后今天調(diào)程序就遇到了一個奇怪的錯誤宛裕,如下:
long long n = 9999;
long long m = 8888;
printf("%d %d\n", n, m);
輸出結(jié)果如下:
9999 0
想了好久都沒有想出原因,最后試著增減參數(shù)先蒋,終于發(fā)現(xiàn)了問題。(后面才發(fā)現(xiàn)編譯器的警告里都寫清楚了宛渐,只是日常不看 warning ……)
原因
警告 C4477 “printf” : 格式字符串“ % d”需要類型“int”的參數(shù)竞漾,但可變參數(shù) 1 擁有了類型“__int64”
n 是 long long 類型,占8位窥翩!而 %d 是打印 int 整形數(shù)據(jù)的业岁,int 只占四位,所以寇蚊,第一個 %d 打印了 n 的低八位笔时,第二個 %d 打印了 n 的高八位!(小端模式的情況下)
至于后面的 m 仗岸,直接被忽略掉了……
解決方法
直接把 %d 改成 %lld 就好了:
long long n = 9999;
long long m = 8888;
printf("%lld %lld\n", n, m);