我正在尝试使用 C 套接字编程来完成 Web 代理。 当客户端在浏览器中按下 STOP 按钮时,服务器在读取时返回 -1,但是 它似乎奇怪地通过了while测试,代码如下: (rio_readlineb 是从缓冲区 rio 到用户缓冲区 buf 的可靠读取)
while ((n = rio_readlineb(&rio,buf,MAXLINE)) > 0){
printf("%d",n)
}
既然n大于零,那么-1怎么打印出来呢?
额外信息(来自评论):
n
的类型应该是ssize_t
。rio_readlineb()
的返回类型也是ssize_t
。
...
- 糟糕:问题是
n
实际上是size_t
类型。
最佳答案
检查n
的类型不是无符号整数类型。检查无符号整数类型的对象是否大于或等于 0 时的结果始终为 1(真)。
关于c socket read 返回-1,但奇怪地通过了 while 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688157/