家庭作业:警告:‘%[’格式没有关闭‘]’ [-Wformat=]

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

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

while(sscanf(page.ptr, "%[^\n]\n%[^[=10=]]", 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%[^[=11=]]", currline, page.ptr) == 2)
     ^
weather.c:121:9: warning: embedded ‘[=11=]’ in format [-Wformat-contains-nul]

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

C字符串以NUL字符结束(字节值为0,通常写成[=10=])。所以你不能把一个放在字符串的中间,这是第二个(完全正确的)警告告诉你的。

由于scanf会在到达"end"时停止读取格式——也就是NUL字符——最后的%[格式没有终止正确。这是第一个警告。

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

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