※ 引述《jlovet (偷拿程式碼的八卦)》之銘言:
: 標題: Re: [語法] %d和%s的實際行為?
: 時間: Mon Dec 21 19:15:05 2009
: → raincole:我就是問他到底會去哪裡讀參數..?還是沒規範? 12/21 19:56
: → raincole:我猜讀字串他會一直讀直到找到\0而記憶體錯誤 12/21 19:57
: → raincole:但是%d呢? 12/21 19:57
沒有這麼複雜吧 ... 推文都有人說它是用 va_list 做了 ...
下面是簡單的做法:
void printf( const char * format, ... ) {
char * f = NULL;
int amount = _parse( format, f );
va_list vl;
va_start( vl, amount );
for( int i = 0; i < amount, ++i ) {
if( f[i] == 'd' ) {
int val = va_arg( vl, int );
// print as int
} else if( f[i] == 's' ) {
const char * val = va_arg( vl, const char * ) ;
// print as string
} else {
// blah blah
}
}
va_end( vl );
free( f );
}
簡單的說,va_list 的參數其型別資訊會消失
單看你給的格式字是什麼它就強制轉型成什麼
--
自High筆記(半荒廢)
http://legnaleurc.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.205.248.119