【发布时间】:2020-10-27 05:06:45
【问题描述】:
我是 c 编程的新手,目前我正在从事套接字编程,我对下面发生的事情感到困惑。我有一个 while 循环尝试打印从服务器接收到的值:
while( recv( sock , buffer, sizeof(buffer), 0) > 0) {
printf("%s\n",buffer );
};
如果我使用下面的格式,它看起来好像什么也没有收到:
int result;
while( (result = recv( sock , buffer, sizeof(buffer), 0)) > 0) {
printf("%s\n",buffer );
};
正常运行,第一个和第二个有什么区别?貌似recv已经返回值了为什么不能直接使用?
谢谢
【问题讨论】:
-
唯一的区别是你可以在while循环之后使用
result。 -
这里没有足够的信息来了解发生了什么。另外,在打印之前如何确定缓冲区中有一个空终止符?
recv()不加一个... -
这是可能的.. 我的问题实际上是针对一般的 while 循环,赋值给 result 和没有它应该没有区别,这在 C 中是否正确?
-
是的,
recv()调用在任何一种情况下都会发生。而且它不会被优化出来,因为它的返回值是未知的,而且它可能会产生超出为表达式返回值的影响。 -
不同之处在于
recv的返回值在循环中可用,因此您可以终止字符串。这是两个循环之间的巨大差异。即使发送者应该终止字符串,也不应该使用第一个循环。依赖发送者意味着发送者中的错误可能表现为接收者中的段错误。
标签: c sockets while-loop variable-assignment