以下代码(网络服务器中请求-响应循环的一部分)大部分时间都有效,但有时会失败,因为客户端会报告它已经获得了一些奇怪的其他字符串(看似来自附近位置的随机字节)此函数中的内存,或空字节)。
string res = "";
if (something) {
res = "ok";
}
if (res.length() > 0) {
send_data((void*) res.c_str(), res.length());
}
在我看来,“”和“ok”似乎都是常量 std:strings,而 res 是指向其中任何一个的指针,因此整个事情应该有效,但显然情况并非如此,所以有人可以向我解释这里发生了什么吗?
最佳答案
您可能忘记发送空终止符来表示字符串的结尾:
send_data((void*) res.c_str(), res.length()+1);
关于C++ 标准 :string memory model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5392197/