gpt4 book ai didi

c++ - va_list 中的未知字符?

转载 作者:行者123 更新时间:2023-11-30 01:18:56 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdarg.h>

void s(const char* param, ...)
{
va_list arguments;
va_start (arguments, param);
const char* param_now = va_arg(arguments, const char*);

while(param_now != NULL)
{
printf("%s", param_now);
param_now = va_arg(arguments, const char*);
}

va_end (arguments);
}

int main()
{
s("one", "two");
return 0;
}

为什么我上面的代码不起作用并显示未知符号而不是一和二?

编辑:找到了一个非常聪明的方法来避免在末尾包含 NULL:

void add_s(const char* param, ...)
{
return s(param, NULL);
}

最佳答案

您从未使用 NULL 参数终止您的序列,您的 while 循环正在检查什么。

s("one", "two" , NULL );

现在只出现“二”了。这是因为第一个字符串在参数 param 中。所以你必须先打印它,然后打印所有可选参数。

您可以使用宏来避免编写 NULL 终止符。像这样的东西:

#define my_s( ... )    s( __VA_ARGS__ , NULL )

请注意,这需要在 my_s 中至少有一个参数。 (并考虑避免在严肃的代码中使用宏)

关于c++ - va_list 中的未知字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21767789/

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