gpt4 book ai didi

c++ - RELEASE 上的错误,但不是 DEBUG 上的错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:47 24 4
gpt4 key购买 nike

std::string s("foo");
sprintf(buf,"%s",s);

为什么至少在 MSVC 2010 下,这行代码在 DEBUG 中没有错误,但在 RELEASE 中却有错误?

最佳答案

%s 格式说明符需要以 NULL 结尾的 char*。您正在传递一个 std::string 实例。如果它在 DEBUG 中工作,那纯属运气。

你应该使用:

std::string s("foo");
sprintf(buf, "%s", s.c_str());

这将提取一个 char* 并确保缓冲区以 NULL 终止。

可能在运行时库中 std::string 对 DEBUG 和 RELEASE 有不同的实现。尝试使用这两种设置进行编译,但将调试符号添加到 RELEASE 构建中,然后单步执行代码。查看存储s的内存位置。有区别吗?

关于c++ - RELEASE 上的错误,但不是 DEBUG 上的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6820330/

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