c++ - 将 std::string 复制到 char*(对于 TCP/IP 套接字)

标签 c++ arrays string qt4 dynamic-memory-allocation

我决定重做这个问题来澄清它, 我目前正在做一个学校项目,我正在创建一个带有 TCP/IP 套接字的客户端服务器,现在我没有遇到与这些相关的问题......

现在我有一个辅助函数,它将接受一个指向套接字的指针和一些我将发送到服务器的数据,它将构建一个 std::string,其格式与我希望字符转换的格式完全相同它到一个字符数组并将其发送到服务器

buffer = new char[tempBuffer.size()];
cout << tempBuffer.size() << " ++ " << strlen(buffer) << " ++ " << endl;
strcpy(buffer, tempBuffer.c_str());
cout << buffer << "  " << tempBuffer.size() << " ++ " << strlen(buffer) << " ++" << endl;
write (*socket, buffer, strlen(buffer));
delete [] buffer;

-tempBuffer 是我之前在辅助函数中构建的 std::string 我们不需要担心,我知道这部分工作正常

现在,当我在我的函数 main() 中运行它时,这一切似乎都完美地工作,我可以在客户端和服务器之间发送尽可能多的数据,但是当我将它用于 UI 类并使用它时,我得到了一个真正的长 glibc 错误 为什么会这样?

最佳答案

cout << *buffer << "  " << tempBuffer.size() << " ++ " << sizeof(*buffer) << " ++" << endl;

这是错误的,原因有二。一、buffer不是 C 风格的字符串。这只是任意数据。所以你不能把它传递给 operator << (char *) (因为那是针对字符串的,它怎么知道要输出多少字节?)。二、sizeof(*buffer)是 1,因为 bufferchar * (它怎么可能知道大小?)。

您必须自己管理尺寸。你不能期待 operator<<sizeof神奇地知道你关心多少字节。你不能对待buffer作为一个字符串,它只是一个字符数组。

关于c++ - 将 std::string 复制到 char*(对于 TCP/IP 套接字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751727/

相关文章:

c# - 插值算法的速度,C# 和 C++ 协同工作

Javascript 如何将数组与另一个数组添加到新数组中?

javascript - 如何以字符串的形式通过名称指向一个JS数组?

javascript - 通过循环构建 JSON 数组

c++ - 使用 C++ 在字符串中的每个单词前面插入字符

c++ - 使用 QGraphicsScene 平滑动画

c++ - Windows 中的 Qt 共享库,不生成 .lib 文件

c++ - Win64 与 System V ABI (x86_64) : Win64 Skipping registers?

java - 在这种情况下如何设置R.string.resource_name

Python 字符串比较不匹配正斜杠