gpt4 book ai didi

c++ - 创建一个字符数组以接受来自服务器上客户端的消息

转载 作者:太空狗 更新时间:2023-10-29 21:01:11 24 4
gpt4 key购买 nike

我正在尝试用 C++ 编写一个程序,它将接受来自服务器上客户端的消息。但首先客户端发送消息的大小,服务器将使用这个值创建一个字符数组来存储最终发送的消息。当我尝试使用消息大小值初始化数组时,编译器说有一个错误,因为 messageSize 整数必须是一个常量值——我想知道为什么会这样,因为据我所知,初始化是完全可以接受的整数类型数组的长度:

//Deal with data in DNS style
int dnsStyle()
{
recv(clientSocket, bufferSize, 1, MSG_WAITALL);
return bufferSize[0];
}

//Communicate in the DNS style of addressing
char DNS()
{
int messageSize = dnsStyle();
printf("The message buffer has been tailoured to this size: '%d'", messageSize);
char bufferMessDNS[messageSize];
//Then recieve the actual message itself
recv(clientSocket, bufferMessDNS, messageSize, MSG_WAITALL);
//Then send the message back to client
send(clientSocket, bufferMessDNS, messageSize, 0);

//std::string returnMess = "OK";
//send(clientSocket, sendBack.c_str(), sendBack.size(),0);
}

最佳答案

在 C++ 中——请注意,我们谈论的是没有扩展的一致 C++——一个自动数组分配的大小在编译时已知,因为数组的大小必须在编译时已知。

因此,这段代码:

char bufferMessDNS[messageSize];

格式错误,因为 messageSize可以改变。

如果您需要不同大小的数组,请使用 vector <char> .

如果你使 messageSize 就可以使上面的代码工作一个所谓的积分常量表达式,像这样:

const size_t messageSize = 256;
char bufferMessDNS[messageSize];

但是这里缓冲区的大小总是恰好是 256 字节——我敢肯定这几乎永远不会是正确的大小。

如果必须的话,您还可以使用 new[] 来使用动态大小的数组:

char* bufferMessDNS = new char [messageSize]

但这会带来一大堆新问题,其中最重要的是管理您刚刚分配的内存的所有权。现在你必须 delete那:

delete [] bufferMessDNS;

关于c++ - 创建一个字符数组以接受来自服务器上客户端的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19324588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com