gpt4 book ai didi

c - 在下面的代码中,如何访问第二个参数?

转载 作者:行者123 更新时间:2023-11-30 18:22:43 25 4
gpt4 key购买 nike

char argvv[8][32];

int func(int n, ...)
{
va_list vl;

va_start(vl, 8);
if (i = 1; i <= n; i++)
{
strcpy(argvv[i], va_arg(vl, char *));
}
va_end(vl);
parseArgs(n, argvv);
...
}

在另一个文件中,我定义:

void parseArgs(int argc, char **argv)
{
printf("arg1:%s\n", argv[1]);
/* ????? I know this is not right; how to access the second argument */
}

最佳答案

va_start()的调用是错误的;它应该是:

va_start(vl, n);

此后,您可以像以前一样使用va_arg()

您的 parseArgs() 函数应声明为:

void parseArgs(int argc, char argv[][32]);

并进行适当的定义。您不是将指针传递给指针;而是将指针传递给指针。你正在传递一个二维字符数组,这是完全不同的。如果您在 func() 的调用范围内声明了 parseArgs(),那么您的编译器将会收到转换错误。

SSCCE

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

void parseArgs(int argc, char argv[][32]);

char argvv[8][32];

static int func(int n, ...)
{
va_list vl;

va_start(vl, n);
for (int i = 0; i < n; i++)
strcpy(argvv[i], va_arg(vl, char *));
va_end(vl);
parseArgs(n, argvv);
return n;
}

void parseArgs(int argc, char argv[][32])
{
for (int i = 0; i < argc; i++)
printf("arg%d:%s\n", i, argv[i]);
}

int main(void)
{
func(3, "abc", "def", "ghi");
return 0;
}

关于c - 在下面的代码中,如何访问第二个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15757066/

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