[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
int lsprintf(char *str, const char *fmt, ...) {
int *arg = (int *)(&str + 2); // 可変個引数の配列
int cnt; // 生成した文字数
int argc = 0; // 引数の個数
int i; // カウンタ
char buf[20]; // 数値変換用バッファ
const char *p = fmt;// コピー元フォーマットを走査する
strcls(str);
strcls(buf); // バッファの初期化
for(cnt = 0; *p != '\0'; p++) {
switch(*p) {
case '%':
// フォーマット指定子の場合は引数の数値を文字列へ変換
switch(p[1]) {
//case 'c': int2char(buf, arg[argc++]); break;
case 'd': int2dec(buf, arg[argc++]); break;
case 'x': int2hex(buf, arg[argc++], 0); break;
case 'X': int2hex(buf, arg[argc++], 1); break;
case 's': int2str(buf, arg[argc++]); break;
//case 'f':
}
// 変換した数値を生成文字列にコピー
for(i = 0; buf[i] != '\0'; i++,cnt++) *str++ = buf[i];
p++;
break;
case '\\':
break;
default:
// フォーマット指定子以外はそのままコピー
*str++ = *p; cnt++;
}
}
return cnt;
}
といっても、追加したのはフォーマット指定子の%cと%sと%Xだけ。
COMMENT