1

我有以下代码片段:

char s[] = "2012-06-01-02";
int nYear;
int nMonth;
int nDay;
int nPass
sscanf(s, "%d-%d%-%d-%d", &nYear, &nMonth, &nDay, &nPass);

此代码使用 Visual Studio 按预期工作,但我使用 gcc 收到以下编译警告

warning: unknown conversion type character '-' in format

然后,如果我运行代码,我会得到 nYear、nMonth 的预期值,但 nDay 和 nPass 都是 0。

为什么这不起作用?

4

1 回答 1

4

你有一个%-我认为你不想要的东西。删除%

sscanf(s, "%d-%d%-%d-%d", &nYear, &nMonth, &nDay, &nPass);
                ^
                |--- delete this '%'

您最终想要的结果如下所示:

sscanf(s, "%d-%d-%d-%d", &nYear, &nMonth, &nDay, &nPass);

顺便说一句,如果你是初学者,你可能想研究一下clang 。在这种情况下,您会收到更好的错误消息,这将帮助您更快地学习。例子:

example.c:10:22: warning: invalid conversion specifier '-'
      [-Wformat-invalid-specifier]
    sscanf(s, "%d-%d%-%d", &nYear, &nMonth, &nDay, &nPass);
                    ~^
1 warning generated.
于 2013-02-26T21:34:44.970 回答