让我们看一下这行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!
这是预期的行为吗?
最佳答案
在第一种情况下,编译器知道要使用哪种选择的sscanf()
转换集:字符串到int
。
sscanf(s, "%04d%02d%02d%02d%02d%02d", ...
在第二种情况下,由于缺少详细信息,编译器认为您可以传递任何格式说明符,因此整个
scanf()
转换集都必须包含在代码中。const char *format
sscanf(s, format, ...
关于c - sscanf,文字或指针格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20237613/