我正在开发一个简单的客户端/服务器应用程序(你可以想到一个类似ftp的程序)。
连接到服务器后,客户端会发送如下消息:
GET filename
文件名长度当然可以变化。我怎样才能确保创建一个足以存储文件名字符串的变量?
char buffer[512];
recv(buffer, sizeof(buffer), 0);
答案 0 :(得分:2)
你可以说文件名长度永远不会超过一些数字,即128.然后只需声明具有该长度的数组。
否则首先发送文件名的长度,然后发送文件名。由于文件名的长度是整数,因此它的长度是固定的,因此您知道前两个字节表示文件名的长度(mind enianness)。之后,当您读取文件名长度时,可以使用malloc
为文件名分配足够的空间。
这看起来很奇怪
sizeof(buffer-1)
buffer
衰减到数组的第一个元素的指针,我怀疑你想从中减去一个。
注意:recv
可能会收到的字节数少于请求的数量,因此您可能需要循环(并解析),直到收到必要的字节数。