gpt4 book ai didi

c - 简单的 Variadic C 函数参数错误

转载 作者:行者123 更新时间:2023-12-04 12:16:16 25 4
gpt4 key购买 nike

我有一个非常简单的代码。此代码在 Linux 机器上运行。但是当我使用交叉编译构建并在嵌入式硬件参数上运行时,可变参数函数的值是错误的。是关于编译(交叉编译)的吗?所有应用程序都运行良好,但可变函数不起作用。

下面是我的示例代码。 foo 和 formatString 函数都工作错误。

void foo(char *fmt, ...)
{
va_list ap;
int d;
char c, *s;

va_start(ap, fmt);
while (*fmt)
{
switch (*fmt++)
{
case 's' :
s = va_arg(ap, char *);
printf("string %s\n", s);
break;
case 'd' :
d = va_arg(ap, int);
printf("int %d\n", d);
break;
case 'c':
c = (char) va_arg(ap, int);
printf("char %c\n", c);
break;
}
va_end(ap);
}

void formatString(char* format, ...)
{
va_list args;
char buffer[100];

va_start(args, format);
sprintf(buffer, format, args);
va_end(args);

printf((char*)buffer);
}

int main(int argc, char **argv)
{
printf("\nProgram Started");

foo("MSG : %d", 10);

formatString("MSG : %d", 10);

return 0;
}

最佳答案

您对 sprintf 的调用不正确。如果你想将 va_list 传递给 sprintf,你应该使用 vsprintf 函数。

此外,为了更加安全,请考虑使用 snprintf(在本例中为 vsnprintf)而不是 sprintf

关于c - 简单的 Variadic C 函数参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15436314/

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