我正在开发一个linux代理程序,我一直在处理这个问题。这就是我正在努力的代码。

while(n = Rio_readlineb_w(&rio_client, buf, MAXLINE) > 0){
  printf("%d\n", n);
  Rio_writen_w(serverfd, buf, n);
}

这是“Rio_readlineb_w”的包装函数
ssize_t Rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen)
{
  ssize_t rc;
  if((rc = rio_readlineb(rp, usrbuf, maxlen)) < 0 )
  printf("Rio_readlineb error");
  printf("%d\n", rc);
  return rc;
}

变量“rc”表示rio_readlineb函数读取的字符数。使用包装器函数中的printf,我检查rc是否正好是读取的字符数。但是,上限while语句的变量'n'始终为1。我不知道怎么了。你认为返回值是怎么变化的吗?

最佳答案

这是一个运算符优先权的问题。

while(n = Rio_readlineb_w(&rio_client, buf, MAXLINE) > 0){

应该是:
while((n = Rio_readlineb_w(&rio_client, buf, MAXLINE)) > 0){

否则,将比较结果(0或1)指定给n

关于c - 为什么返回变量的值会改变?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31004951/

10-14 01:24