看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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