簡體   English   中英

sscanf,文字或指針格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM