C++ 标准 :string memory model

标签 c++ string memory

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

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/

相关文章:

写入数据科学标准输出时,Python 进程因 "Low Swap"而终止

c# - 了解内存

c++ - X 在此函数中使用未初始化

c++ - 有没有办法在qt中卸载eventfilter?

python - 使用 RegEx (或其他方式)将 ",**"替换为换行符

javascript - 使用数组索引/Javascript 更改字符串的顺序

C++ fwrite 不写入文本文件,不知道为什么?

c++ - 线程参数的高效快速方法

ruby - 将带括号的字符串转换为树,Ruby

c - 打印手动制作的字符串不起作用