1

我决定重做这个问题来澄清它,我目前正在从事一个学校项目,我正在创建一个带有 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() 中运行它时,这一切似乎都能完美运行为什么会这样?

4

1 回答 1

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

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

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

于 2013-11-03T10:03:16.723 回答