C++ C++;变量数组

C++ C++;变量数组,c++,arrays,sockets,variables,buffer,C++,Arrays,Sockets,Variables,Buffer,我正在尝试编写一个套接字系统来处理非常长的消息(它处理聊天系统)。我试图用const int初始化一个数组,它确实编译,但是我警告过ISO C++禁止它。有人能解释一下情况吗 下面是一个如何使用它的示例(这是为了避免编写一个剩余字节的多接收系统(我已经有了,但我觉得这样会更有效)) 这样做可以接受吗,还是应该坚持使用multi-receive-until-done方法 谢谢, Collinconst int BUFFERLEN=atoi(api_GETVALUE(1,inbuffer.c_str

我正在尝试编写一个套接字系统来处理非常长的消息(它处理聊天系统)。我试图用const int初始化一个数组,它确实编译,但是我警告过ISO C++禁止它。有人能解释一下情况吗

下面是一个如何使用它的示例(这是为了避免编写一个剩余字节的多接收系统(我已经有了,但我觉得这样会更有效))

这样做可以接受吗,还是应该坚持使用multi-receive-until-done方法

谢谢, Collin

const int BUFFERLEN=atoi(api_GETVALUE(1,inbuffer.c_str())//这是我的API调用
如果(BUFFERLEN!=-1){//,则在出错时返回“-1”
std::向量INBUFFER(BUFFERLEN);
recv(SOCK,INBUFFER.data(),INBUFFER.size(),0);
}

<代码> > p>当你使用C++数组时,必须在编译时知道大小。否则,您需要使用动态分配
const
并不一定意味着
BUFFERLEN
是编译时常量

我试图用const int初始化一个数组,它确实编译,但是我警告过ISO C++禁止它。有人能解释一下情况吗

这是因为程序中的 const int /c>不是实际的常量表达式(编译时已知的值),这意味着程序中声明的数组是可变长度数组(VLA),在ISO C++中是不允许的。您的程序可以编译,因为编译器提供VLA作为扩展

您可以使用的是
std::vector

因此

char INBUFFER[BUFFERLEN];  //old code
recv(SOCK,INBUFFER,sizeof(INBUFFER),0); //old code
你可以用

std::vector<char> INBUFFER(BUFFERLEN); //new code
你可以写:

recv(SOCK, &INBUFFER[0], INBUFFER.size(),0); //new code

C++98不允许可变长度数组。int是否为“const”并不重要,因为无法预先确定大小。在char*周围创建一个包装器来管理自己内存的分配和取消分配是一个可以接受的解决方案。

要么进行多个较小的接收,要么动态分配缓冲区。非常感谢所有发布的人,我现在明白了。我甚至没有意识到我可以使用向量从套接字接收数据,这正是我所需要的。我一直在用C风格编写我的大部分代码,因为我还没有学到一些更有用的STL特性。
recv(SOCK,INBUFFER,sizeof(INBUFFER),0); //old code
recv(SOCK, &INBUFFER[0], INBUFFER.size(),0); //new code