我有以下代碼:的sprintf()亂碼輸出
char buf[255];
int ID = 0;
double val = 1.234;
sprintf(buf, "%[email protected]%.3lf", ID, val);
printf("%s", buf);
printf()
正確打印ID
值,但val
值只是一些垃圾。你知道是什麼原因導致這個問題?我在Win7 32位上使用MSVC 9。上述代碼在64位機器上正常工作甚至更加陌生。
在此先感謝您的幫助。
我有以下代碼:的sprintf()亂碼輸出
char buf[255];
int ID = 0;
double val = 1.234;
sprintf(buf, "%[email protected]%.3lf", ID, val);
printf("%s", buf);
printf()
正確打印ID
值,但val
值只是一些垃圾。你知道是什麼原因導致這個問題?我在Win7 32位上使用MSVC 9。上述代碼在64位機器上正常工作甚至更加陌生。
在此先感謝您的幫助。
此評論之後:
是的,還有一些額外的代碼。這段代碼被編譯到一個DLL庫中,實際上我有三個地方,我稱之爲我的問題中發佈的代碼,並且只在輸出垃圾中的一個地方,如上所述。
這可能是由於代碼中其他地方的某些問題。你可能會破壞堆棧/堆,並無意中覆蓋你的變量。用內存檢查器(valgrind(unix),CMemLeak(everything))檢查你的代碼
在mac上使用gcc 4.2.1。 – Geoffroy
使用'%.3f'而不是'%.3lf'是否改變了什麼? – vinnydiehl
使用%f不能解決此問題。 – gchlebus