我正在学习如何在C中获取参数,但是,当我使用以下输入运行下面的代码时,第一个变为null。
输入:./a.out a b c d e f g h i j k
输出:(null) b c d e f g h i j k
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 2, j = 0;
char *foo = argv[1];
char *bar[10];
while(j < 10 && i < argc)
{
bar[j++] = argv[i++];
}
bar[j] = NULL;
printf("%s ", foo);
for(j = 0; bar[j] != NULL; j++)
{
printf("%s ", bar[j]);
}
printf("\n");
return 0;
}
答案 0 :(得分:5)
在循环结束时,您将NULL
写入bar[10]
,但您只分配了bar[0 - 9]
。这可能会覆盖foo
。
答案 1 :(得分:4)
你在循环结束时将bar [10]设置为NULL,但它只会上升到bar [9]。由于foo仅在堆栈上的bar之后分配,因此bar [10] = NULL会覆盖foo。
答案 2 :(得分:-1)
尝试
while(--argc)puts(* ++ argv);