这行得通:
char blockSize[4];
int r = recv(socket, blockSize, 4, 0);
这不起作用。它总是返回0,为什么?
size_t blockSize = 0;
int r = recv(socket, (char*)blockSize, 4, 0);
这不是一个主要问题,我知道如何将char数组转换回size_t。但我只是想知道为什么它不起作用。
在第一个例子中,您将blockSize
的地址(通过数组衰减)传递给recv()
。
在第二个例子中,您将blockSize
的值传递给recv()
,类型转换为指针。由于blockSize
为0,指针实际上是nullptr
。您需要传递blockSize
的地址。另外,size_t
不能保证是4字节,所以使用(u)int32_t
代替,例如:
uint32_t blockSize = 0;
int r = recv(socket, (char*)&blockSize, 4, 0);