[英]In C - warning: format '%d' expects a matching 'int' argument [-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.