[英]sscanf, literal or pointer format
讓我們看看這行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()
轉換選擇集:string to int
。
sscanf(s, "%04d%02d%02d%02d%02d%02d", ...
在第二種情況下,缺少此細節,編譯器認為您可以傳遞任何格式說明符,因此整個scanf()
轉換集需要在代碼中。
const char *format
sscanf(s, format, ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.