1
私は自分でprintf
を実装しようとしていますが、ワイド文字の扱いに問題があります%S
。va_argのcでのワイド文字、%Sを処理する方法
void my_printf(char *format, ...)
{
char *traverse;
va_list arg;
va_start(arg, format);
traverse = format;
while (*traverse)
{
if (*traverse == '%')
{
*traverse++;
if (*traverse == 'S')
printf("%S\n", va_arg(arg, wchar_t));
*traverse++;
}
else
putchar(*traverse++);
}
va_end(arg);
}
警告:フォーマットは '* wchar_t型' タイプを指定します(別名 'int型*')が、引数は 'wchar_t型'(別名 'INT')[-Wformat] のprintf( "%Sを入力している\ n "、va_arg(arg、wchar_t));
次のコードprintf
を使用すると問題なく動作します。
printf("%S\n", L"Some String");