指针在C中导航数组的问题

时间:2016-05-02 17:11:01

标签: c arrays pointers

我想创建一个向量(动态分配),其中向量的每个元素都是从第3个参数开始从命令行中获取的。

我写了这个:

#include <stdio.h>
#include <stdlib.h>

int main(int argn, char* argc[]) {
    if (argn < 4) {
        printf("Error: invalid parameter number. \n");
        return 0;
    } 
    float min = atof(argc[1]), max = atof(argc[2]), *v, *k;
    int dim = argn-3;
    char **p;
    v = malloc(dim*sizeof(float));
    k = v;
    for (p = argc+3; p < argc+dim; p++) {
        *k = atof(*p);
        k++;
    }
    for (k = v; k < v+dim; k++) {
        printf("%3.f ",*k);
    }
    return 0;
}

问题是只有第一个参数似乎是从命令行中获取的,而其他参数则不是。

示例:我启动[ProgramName] 25 30 27 28 29 32

它返回27.0 0.0 0.0 0.0,但它应该返回27.0 28.0 .29.0 32.0

为什么我的代码不起作用?

对于最终的语法错误,我不是英语。

1 个答案:

答案 0 :(得分:3)

你写道:

int dim = argn-3;
...
for (p = argc+3; p < argc+dim; p++) {
...
}

假设argn==5,然后是dim==2,循环归结为:

for (p = argc+3; p < argc+2; p++) {
...
}

永远无法运行。

另一方面,习惯上使用argc和argv作为main的参数。如果您遵循这一点,您的代码将对其他人更具可读性,而其他人的代码将更易于阅读。此外,你忘记打印换行了。