我是C的新手并试图弄清楚数组和命令行参数。我有:
int main(int argc, int **argv) {
int vals[8];
for(int i = 0;i < 8;i = i + 1) {
vals[i] = atoi(argv[i]);
printf("%d", vals[i]);
}
}
我用./file 1 2 3 4 5 6 7 8
调用它,我希望它会吐出12345678
,但相反,它会吐出01234567
这对我来说它只是打印了阵列位置。如何实际打印/访问vals[i]
的值,和/或确保命令行值实际上已正确分配?
提前致谢。
答案 0 :(得分:2)
从argv[1]
开始,以排除作为程序名称的argv
的第一个元素。一种简单的方法是在程序顶部增加argv
。
int main(int argc, char **argv) {
argv++; /* argv[0] is the program name */
int vals[8];
for(int i = 0;i < 8;i = i + 1) {
vals[i] = atoi(argv[i]);
printf("%d", vals[i]);
}
}
在旁注中,您应该在argc
i
的元素之前检查argv
的值
答案 1 :(得分:0)
argv [0]是该程序的名称。
参数从1开始。你也应该养成在循环中使用argc的习惯。
int main(int argc, int *argv[])
{
for(int i = 1 ; i < argc ; ++ i )
{
int val = atoi(argv[i]);
printf("%d", val);
}
}