C++ std:字符串内存模型

djc*_*djc 2 c++ memory string

以下代码(网络服务器中的请求 - 响应循环的一部分)大部分时间都可以工作,但有时会失败,因为客户端会报告它有一些奇怪的其他字符串(看似随机字节来自内存附近的位置)函数或空字节).

string res = "";
if (something) {
    res = "ok";
}

if (res.length() > 0) {
    send_data((void*) res.c_str(), res.length());
}
Run Code Online (Sandbox Code Playgroud)

在我看来,似乎""和"ok"都是常量的std:字符串,而res是指向其中任何一个的指针,因此整个事情应该有效,但显然情况并非如此,所以可以有人请向我解释这里发生了什么?

Ale*_*ler 6

您可能忘记发送null-terminator来表示字符串的结尾:

send_data((void*) res.c_str(), res.length()+1);
Run Code Online (Sandbox Code Playgroud)