C++ sprintf()乱码输出
我有以下代码:C++ sprintf()乱码输出,c++,printf,C++,Printf,我有以下代码: char buf[255]; int ID = 0; double val = 1.234; sprintf(buf, "%d@%.3lf", ID, val); printf("%s", buf); printf()正确打印ID值,但val值只是一些垃圾。你知道是什么导致了这个问题吗?我在Win32-bit上使用MSVC 9。更奇怪的是,上述代码在64位机器上正常工作 提前感谢您的帮助。在此评论之后: 是的,还有一些附加代码。这段代码被编译到一个DLL库中,实际上我在三个地方
char buf[255];
int ID = 0;
double val = 1.234;
sprintf(buf, "%d@%.3lf", ID, val);
printf("%s", buf);
printf()
正确打印ID
值,但val
值只是一些垃圾。你知道是什么导致了这个问题吗?我在Win32-bit上使用MSVC 9。更奇怪的是,上述代码在64位机器上正常工作
提前感谢您的帮助。在此评论之后:
是的,还有一些附加代码。这段代码被编译到一个DLL库中,实际上我在三个地方调用了问题中发布的代码,而在输出垃圾中只有一个地方,如前所述
这可能是由于代码中其他地方的一些问题造成的。您可能在某个地方损坏了堆栈/堆,并无意中覆盖了变量。使用内存检查器检查代码(valgrind(unix)、CMemLeak(everything))使用
%.3f
而不是%.3lf
是否可以更改任何内容?使用%f并不能解决此问题。@PaulR对于长双精度,您需要%Lf
,并带有大写字母“L”。(%f
转换之前忽略了“l”)。在MSVC9、Win32位的Win7上尝试过,效果良好。有其他代码吗?如果您只编写一个只有此代码的控制台应用程序,会发生什么情况?是的,还有一些附加代码。这段代码被编译到一个DLL库中,实际上我在三个地方调用了问题中发布的代码,只有一个地方它输出了如上所述的垃圾。当我试图使用CMemLeak检查内存泄漏时,出现了链接时间错误。我已经在循环中运行了100000多次代码,并使用windows任务管理器监视内存使用情况,但内存泄漏似乎不是这样。现在,我用boost::format替换sprintf解决了这个问题。我没有说你在哪里泄漏内存,你在破坏堆栈/堆。通过快速修复,问题可能会在以后再次出现。您得到了什么链接错误?我在类的析构函数中调用的未解析XWBReportFinal得到了LNK2019,该类的方法调用“sprintf”。是否包含CMemLeak标头?为什么不使用在使用mallocs的源代码中包含头的标准方法呢?