【发布时间】:2011-03-22 13:41:34
【问题描述】:
以下代码(网络服务器中的请求-响应循环的一部分)大部分时间都可以工作,但有时会失败,因为客户端会报告它已经获得了一些奇怪的其他字符串(似乎是来自附近位置的随机字节此函数中的内存,或空字节)。
string res = "";
if (something) {
res = "ok";
}
if (res.length() > 0) {
send_data((void*) res.c_str(), res.length());
}
在我看来,"" 和 "ok" 似乎都是常量 std:strings,而 res 是指向其中任何一个的指针,因此整个事情应该可以工作,但显然情况并非如此,那么有人可以向我解释一下这里发生了什么吗?
【问题讨论】:
-
您的
send_data()是否有可能是非阻塞的,而您在完成之前正在销毁res? -
钱是对的。我在这里使用 0MQ,并且我正在尝试发送数据的非复制方式,但显然在这种情况下不能正常工作。谢谢!
-
c_str()的返回值所指向的数据只保证在下一次调用res的非常量成员函数之前有效。具体来说,如果 res 被破坏,例如超出范围,那么之前由res.c_str()返回的值将不再有效。