让我们看看这行C代码:
if(sscanf(s, "%04d%02d%02d%02d%02d%02d", &year, &month, &day, &hour, &min, &sec) != EOF) {
// ... other stuff
}
我正在使用Microchip C30编译器。 's'和之前定义的其他变量。 我整个代码的大小是:237396字节。
让我们尝试将格式字符串从文字更改为指针:
const char *format = "%04d%02d%02d%02d%02d%02d";
if(sscanf(s, format, &year, &month, &day, &hour, &min, &sec) != EOF) {
// ... other stuff
}
现在大小:243798字节!超过6 kB!
这是预期的行为吗?
答案 0 :(得分:1)
在第一种情况下,编译器知道要使用的sscanf()
次转换选择集:字符串到int
。
sscanf(s, "%04d%02d%02d%02d%02d%02d", ...
在第二种情况下,缺少此细节,编译器认为您可以传递任何格式说明符,因此整个scanf()
转换集需要在代码中。
const char *format
sscanf(s, format, ...