char * 和 const_cast<char*>(string.c_str()) 有什么区别

err*_*500 5 c++ char osc const-cast

我使用外部库来处理 2 个应用程序之间的 udp (OSC) 通信。为了格式化将要发送的消息,库需要一个 char* 但我从 UI 中得到一个必须转换的字符串。

当我处理代码的其他部分时,udp 部分是这样硬编码的:

    char* endofMess = "from setEndMess"; 
Run Code Online (Sandbox Code Playgroud)

并且工作正常。我认为让它与我的字符串一起工作很容易并写道:

    std::string s = "from setEndMess";
    char* endofMess = const_cast<char*>(s.c_str());
Run Code Online (Sandbox Code Playgroud)

但与第一个例子不同的是,我收到的消息格式正确,现在我只收到乱码。有人知道它可能来自哪里吗?

谢谢!

马修

编辑:我使用的代码:每次 OSCVal 更改时发送消息的方法:

void osc500::testOSC(int identifier, float OSCval)
{
UdpTransmitSocket transmitSocket( IpEndpointName( destIP, port ) );
 char buffer[1024];
 osc::OutboundPacketStream p( buffer, 1024 );

p << osc::BeginBundleImmediate
    << osc::BeginMessage( endofMess )
       << OSCval << osc::EndMessage
<< osc::EndBundle;


transmitSocket.Send( p.Data(), p.Size() );
}
Run Code Online (Sandbox Code Playgroud)

如果我必须改变 OSC 模式,我称之为:

void osc500::setEndMess(String endpattern){
// endofMess = "from setEndMess"; //OK works fine each time it's called

//1st try :
//std::string s = "from setEndMess"; 
//endofMess = const_cast<char*>(s.c_str()); //gibberish    

//2nd try :
//std::string s = "from setEndMess";
//endofMess = &s[0]; //gibberish    

//3rd & 4th tries :
//char s[4] = {'t','e','s','t'}; 
//char s[5] = {'t','e','s','t','\0'};
//endofMess = s; //gibberish    
}
Run Code Online (Sandbox Code Playgroud)

Yak*_*ont 3

我怀疑 char* 没有被写入,它只是非常量,因为它是一个遗留 API。如果是这样,您的问题可能是 std::string 超出了范围,或者在您调用 c_str 的点和在 API 内部使用它的点之间被修改了。