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

时间:2015-01-30 02:12:13

标签: c linux macos

我运行此代码时收到上述警告。我有点不确定,因为它在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]

有人可以向我解释为什么这两个系统会有所不同,为什么它不能在这个系统上工作?或者我应该考虑纠正这个警告?

1 个答案:

答案 0 :(得分:1)

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

由于scanf在到达" end"时会停止阅读格式。 - 也就是说,NUL字符 - 最后%[格式未正确终止。这是第一个警告。

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

无论哪种方式,您都应该修改您的代码,以便它不会给您这些警告。