将std :: string复制到char *(用于TCP / IP套接字)

时间:2013-11-03 10:00:00

标签: 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我之前在helper函数中构建我们不需要担心我知道那部分工作正常

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

1 个答案:

答案 0 :(得分:2)

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

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

您必须自己管理尺寸。您不能指望operator<<sizeof神奇地知道您关心的字节数。您不能将buffer视为字符串,它只是一个字符数组。