gpt4 book ai didi

c - c 中带有宽字符的 va_arg,如何处理 %S

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:07 25 4
gpt4 key购买 nike

我正在尝试实现我自己的 printf,我在处理宽字符 %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);
}

warning: format specifies type 'wchar_t *' (aka 'int *') but the argument has type 'wchar_t' (aka '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 将指向数组中最后一个元素之后的一个元素,并且检查 while ( *traverse) 将取消引用它。

关于c - c 中带有宽字符的 va_arg,如何处理 %S,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37540077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com