我运行此代码时收到上述警告。我有点不确定,因为它在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]
有人可以向我解释为什么这两个系统会有所不同,为什么它不能在这个系统上工作?或者我应该考虑纠正这个警告?
答案 0 :(得分:1)
C字符串由NUL字符终止(字节值0,通常写为\0
)。所以你不能把一个放在一个字符串的中间,这是第二个(完全正确的)警告告诉你的。
由于scanf
在到达" end"时会停止阅读格式。 - 也就是说,NUL
字符 - 最后%[
格式未正确终止。这是第一个警告。
scanf
标准库函数可能并不关心丢失的终止符。您可能在两个系统上提供不同的编译器警告选项,或者默认警告不同。
无论哪种方式,您都应该修改您的代码,以便它不会给您这些警告。