gpt4 book ai didi

c++ - char * 和 const_cast(string.c_str()) 有什么区别

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

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

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

    char* endofMess = "from setEndMess"; 

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

    std::string s = "from setEndMess";
char* endofMess = const_cast<char*>(s.c_str());

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

谢谢!

马修

编辑:我使用的代码:每次 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() );
}

如果我必须更改 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
}

最佳答案

c_str() 用于std::string 的只读访问。

如果你想通过指针写入一个字符串,那么使用...

  1. char 而不是 std::string 的数组(或 vector )
  2. char* buf = &str[0]; - 直接指向字符串的第一个字符

技巧 (2) 保证在 C++11 下工作;实际上,它也适用于 C++03,但这依赖于具有连续存储的 std::string 的编译器实现。

(无论你做什么,都要注意缓冲区长度。)

关于c++ - char * 和 const_cast<char*>(string.c_str()) 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13439363/

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