Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ sprintf()乱码输出_C++_Printf - Fatal编程技术网

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的源代码中包含头的标准方法呢?