Я работаю над прокси-программой 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;
}
Variable 'гс' означает количество символов, считанных функции rio_readlineb. Используя printf внутри функции wrapper, я проверил, что rc - это точно количество прочитанных символов. Однако переменная «n» верхнего оператора while всегда 1. Я не могу понять, что не так. Считаете ли вы, что возвращаемое значение каким-то образом изменилось?
Избегайте использования оператора присваивания в условиях, так как это является хорошо известная причина многочисленных ошибок. Редко бывает ситуация, когда вам нужно это делать. – Lundin
@ Lundin: Я нахожу это более читаемым, чем 'while (true) ... if() break;'. Однако сравнение должно быть заменено, поэтому присваивание находится справа от оператора сравнения, и назначение должно быть заключено в скобки. – Olaf
@Olaf В качестве альтернативы вы можете добавить дополнительный вызов за пределы цикла, что, возможно, немного странно. 'П = FUNC(); в то время как (n> 0) {... n = func();} 'Нет идеального способа обработки таких циклов, вы столкнетесь с одной плохой практикой или другой. – Lundin