[英]va_arg with wide char in c, how to handle %S
我正在尝试实现自己的printf
,我有一个处理宽char %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);
}
警告:format指定类型'wchar_t *'(又名'int *'),但参数的类型为'wchar_t'(又名'int')[ - Wformat] printf(“%S \\ n”,va_arg(arg,wchar_t)) ;
当我使用以下代码printf
工作正常。
printf("%S\n", L"Some String");
您正在传递指针并检索整数。 L"Some String"
和va_arg(arg, wchar_t)
不匹配。
改为检索指针:
va_arg(arg, wchar_t*)
行*traverse++;
不正确,取消引用是多余的。 它应该是简单的: traverse++;
另外,您的代码不会进行任何输入检查,恶意字符串将导致未定义的行为。 如果字符'%'
是最后一个字符,迭代器traverse
将指向超出数组中最后一个元素的一个,而check while (*traverse)
将取消引用它,则会发生这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.