組み込み開発フォーラム - MONOist(モノイスト)
この記事のサンプルコードでは、printfの書式指定子を自前で処理しているけど、vsnprintf関数(もしくはvsprintf関数)を使えば次のようにはるかに簡単になる。(しかも書式指定子の機能をフルに使える)
#define BUFFSIZE 256 void mprintf(char *fmt, ...) { va_list args; char buff[BUFFSIZE]; char* p; va_start(args, fmt); vsnprintf(buff, BUFFSIZE, fmt, args); va_end(args); for (p = buff; *p != '\0'; p++) { outs(*p); //1文字づつ出力 } }
ちなみにvsnprintf関数が使えるならvsprintfよりもより安全なvsnprintfを使うべき。(この記事の開発環境はgccなのでvsprintfが使えるはず。)