我正在研究一些包含以下功能的遗留代码。总之,该函数从文本文件中读取一行,删除前导/尾随空格和换行符,检查错误,并在成功时返回字符串中的字符数,或者在错误时返回-1。你能给我一些提示来摆脱警告吗?我知道这不是错误,但我想改进代码。谢谢!
static int readline(file *mf, char *buf, int n, int strip) {
if (!buf || n < 1 || !mf) return seterror(MDIO_BADPARAMS);
// Read the line
fgets(buf, n, mf->f);
// End of file reached?
if (feof(mf->f)) return seterror(MDIO_EOF);
// File I/O error?
if (ferror(mf->f)) return seterror(MDIO_IOERROR);
// comment line?
if (buf[0] == '#') return readline(mf,buf,n,strip);
// Strip whitespace
if (strip) strip_white(buf);
return strlen(buf);
}
该函数能够编译(nvcc),但它有警告:
警告:未使用呼叫结果
答案 0 :(得分:4)
fgets
属性声明 warn_unused_result
。不检查结果通常是编程错误:如果fgets
无法读取任何内容,则返回NULL并保持缓冲区不变。如果您不检查此情况,则可能会处理陈旧或未初始化的数据。
要解决此问题,请检查结果:
if(!fgets(buf, n, mf->f)) return seterror(MDIO_EOF);