我决定重做这个问题来澄清它, 我目前正在开发一个学校项目,我正在使用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我之前在helper函数中构建我们不需要担心我知道那部分工作正常
现在当我在我的函数main()中运行它时,这一切看起来都很完美。我可以在客户端和服务器之间发送尽可能多的东西,但是当我将它用于UI类并使用它时,我得到一个真正的长glibc错误为什么会这样?
答案 0 :(得分:2)
cout << *buffer << " " << tempBuffer.size() << " ++ " << sizeof(*buffer) << " ++" << endl;
这有两个原因是错误的。首先,buffer
不是C风格的字符串。这只是任意数据。所以你不能把它传递给operator << (char *)
(因为那是字符串,它怎么知道要输出多少字节?)。其次,sizeof(*buffer)
为1,因为buffer
是char *
(它怎么可能知道大小?)。
您必须自己管理尺寸。您不能指望operator<<
或sizeof
神奇地知道您关心的字节数。您不能将buffer
视为字符串,它只是一个字符数组。