gpt4 book ai didi

c++ const_cast 在 2 个 64 位 ms 操作系统上的相同二进制不同结果

转载 作者:行者123 更新时间:2023-11-27 22:53:39 25 4
gpt4 key购买 nike

我有以下功能(为简洁起见缩短):(端口号 = 12345)

void startparser(){
std::ostringstream convert;
convert.str("");
convert << '"' << "c:\\some\\file path\\a_program.exe" << '"' << " " << PortNo;
std::cout << "DEBUG2 " << convert.str() <<std::endl;
char *cmd = const_cast<char*> ( convert.str().c_str() );
std::cout << "DEBUG3 " << cmd <<std::endl;
}

我用 eclipse MinGW64 在 w10 64bit 上编译,代码输出

DEBUG2 "c:\some\文件路径\a_program.exe"12345

DEBUG3 "c:\some\文件路径\a_program.exe"12345

现在,如果我将二进制文件和它使用的 3 个 dll 复制到 win7 64 机器上并运行我得到的相同代码

DEBUG2 "c:\some\文件路径\a_program.exe"12345

调试 3.

我不明白?我需要 cmd 成为 LPTSTR 。有人可以澄清一下吗?获取我的 LPTSTR 的另一种方法也可以。

最佳答案

您正在使用临时对象:ostringstream::str() 返回一个立即销毁的对象。因此在这一行之后

char *cmd = const_cast<char*> ( convert.str().c_str() );

cmd 指向用于临时对象的内存,因此不再有效。

如果您确实需要使用const char* 进行操作,那么您需要创建一个中间string tmp = convert.str()。然后指向 tmp.c_str() 的指针将在 tmp 的整个范围内有效。

关于c++ const_cast<char*> 在 2 个 64 位 ms 操作系统上的相同二进制不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35200944/

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