C将字符命令行参数转换为整数数组

时间:2017-04-13 18:33:22

标签: c arrays

我是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]的值,和/或确保命令行值实际上已正确分配?

提前致谢。

2 个答案:

答案 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);
     }
 }