c++ const_cast<char*> 在 2 个 64 位 ms os 上的相同二进制不同结果

c++ const_cast<char*> same binary different results on 2 64bit ms os's

我有以下功能(为简洁起见缩短): (端口号 = 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\file path\a_program.exe" 12345

DEBUG3 "c:\some\file path\a_program.exe"12345

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

DEBUG2 "c:\some\file path\a_program.exe" 12345

DEBUG3 .

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

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

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

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

如果你真的需要用const char*操作,那么你需要创建一个中间string tmp = convert.str()。然后指向 tmp.c_str() 的指针将在 tmp.

的整个范围内有效