gpt4 book ai didi

c++ - 与 sprintf 斗争......愚蠢的事情?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:38 27 4
gpt4 key购买 nike

抱歉打扰大家了,这让我很痛苦。这是代码:

char buf[500];
sprintf(buf,"D:\\Important\\Calibration\\Results\\model_%i.xml",mEstimatingModelID);

mEstimatingModelID 是一个整数,当前值为 0。

很简单,但调试显示这正在发生:

0x0795f630 "n\Results\model_0.xml"

即它缺少字符串的开头。

有什么想法吗?这很简单,但我想不通。

谢谢!

最佳答案

为了使它成为一个实际的一般答案:这是一个类似错误的 list :

  • 永远不要相信你在 Release模式下看到的东西,尤其是从堆栈内存中分配的局部变量。堆数据中存在的静态变量通常是唯一正确的东西,但即便如此,也不要相信它。 (上面的用户就是这种情况)根据我的经验,较新版本的 VS 具有不太可靠的 Release模式数据(可能是因为它们在发布中优化得更多,或者可能是 64 位或其他)

  • 始终确认您正在检查正确函数中的变量。在包含一些未初始化垃圾的高级函数中很容易有一个名为“buf”的变量。这很容易与下层子程序/函数中的同名变量混淆。

  • 仔细检查缓冲区溢出总是一个好主意。如果您曾经在 sprintf 中使用 %s,您可能会遇到缓冲区溢出。

  • 检查您的类型。 sprintf 具有很强的适应性,您可以通过在需要 int 时传入字符串指针等轻松获得非崩溃但奇怪的结果。

关于c++ - 与 sprintf 斗争......愚蠢的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5637974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com