好久沒用 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 的高八位?。ㄐ《四J降那闆r下)
至于后面的 m ,直接被忽略掉了……
解決方法
直接把 %d 改成 %lld 就好了:
long long n = 9999;
long long m = 8888;
printf("%lld %lld\n", n, m);