繁体   English   中英

作业:警告:'%['格式[-Wformat =]不能关闭']'

[英]Homework: warning: no closing ‘]’ for ‘%[’ format [-Wformat=]

运行此代码时,我收到以上警告。 我有点不确定,因为它在Mac OS环境中可以正常工作,但是一旦我在linux中运行它,它就会停止工作。

while(sscanf(page.ptr, "%[^\n]\n%[^\0]", currline, page.ptr) == 2)
{
...
}

这些是我在Linux系统上收到的其他警告:

weather.c: In function ‘main’:
weather.c:121:9: warning: no closing ‘]’ for ‘%[’ format [-Wformat=]
     while(sscanf(page.ptr, "%[^\n]\n%[^\0]", currline, page.ptr) == 2)
     ^
weather.c:121:9: warning: embedded ‘\0’ in format [-Wformat-contains-nul]

谁能向我解释为什么这在两个系统上会有所不同,以及为什么在这个系统上将不起作用? 还是我应该考虑纠正此警告?

C字符串以NUL字符(字节值0,通常写为\\0 )终止。 因此,您不能将一个放在字符串的中间,这是第二个(完全正确)警告告诉您的内容。

由于scanf到达“ end”(即NUL字符)时将停止读取格式,因此最后一个%[格式未正确终止。 那是第一个警告。

scanf标准库函数可能不关心缺少的终止符。 您可能在两个系统上提供了不同的编译器警告选项,或者默认警告是不同的。

无论哪种方式,您都应该修复您的代码,以免发出警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM