问题描述
我正在尝试打印传递给 C 程序的参数,并且我想多次执行此操作。下面是代码。你可以看到,我已经创建了一个 count 变量并在每个 while 循环之前设置为 argc。是否有与 argv 类似的事情,以便它可以在 while 循环之前重置为 argv[0]
?这是一个数组指针,我没有找到正确的方法。
#include <stdio.h>
int main(int argc,char const *argv[])
{
int count = argc;
while (count-- > 0)
{
printf("%s%s",*argv++,(count > 0) ? " " : "");
}
printf("\n");
count = argc;
while (count-- > 0)
{
// how to reset argv to point to argv[0] before calling *argv++
printf((count > 0) ? "%s " : "%s",*argv++);
}
printf("\n");
return 0;
}
解决方法
您对 argv
的定义是错误的。来自 C11 标准 §5.1.2.2.1/2::
参数argc和argv以及argv指向的字符串 数组应可由程序修改,并保留其最后存储的 程序启动和程序终止之间的值。
它应该是 char **argv
或 char *argv[]
int main(int argc,char *argv[])
{
int count = argc;
char **savedArgv = argv;
while (count--)
{
printf("%s%s",*argv++,(count > 0) ? " " : "");
}
printf("\n");
count = argc;
argv = savedArgv;
while (count--)
{
// how to reset argv to point to argv[0] before calling *argv++
printf((count > 0) ? "%s " : "%s",*argv++);
}
printf("\n");
return 0;
}