我决定重做这个问题来澄清它, 我目前正在做一个学校项目,我正在创建一个带有 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,因为 buffer
是 char *
(它怎么可能知道大小?)。
您必须自己管理尺寸。你不能期待 operator<<
或 sizeof
神奇地知道你关心多少字节。你不能对待buffer
作为一个字符串,它只是一个字符数组。
关于c++ - 将 std::string 复制到 char*(对于 TCP/IP 套接字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751727/