我有这个功能:
void receive_message(int sock, char buffer[]) {
int test = recv(sock, buffer, strlen(buffer), 0);
buffer[test] = '\0';
}
函数recv()
的第三个参数不起作用。显然我不能使用strlen()
,因为缓冲区没有\0
。 sizeof()
也没有帮助我。我希望我能在不将第三个参数传递给我的函数receive_message()
的情况下做到这一点。
答案 0 :(得分:10)
你希望徒劳无功; C数组没有那么多结构。你需要自己传递大小。
答案 1 :(得分:2)
buffer
不是矢量。它可能看起来像一个数组,但由于它被声明为函数参数,它实际上是一个指针。没有办法知道指针指向的缓冲区有多长,除非你知道它以一个sentinel值终止(例如\0
)。
让函数采用额外的参数可能是最容易的。
答案 2 :(得分:1)
如果不是零终止,则无法获得大小。你别无选择,只能将大小作为参数传递或将字符串零终止。
答案 3 :(得分:1)
你不能这样做。传递额外参数,或在缓冲区定义和使用中使用#define
。