我想创建一个向量(动态分配),其中向量的每个元素都是从第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
为什么我的代码不起作用?
对于最终的语法错误,我不是英语。
答案 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的参数。如果您遵循这一点,您的代码将对其他人更具可读性,而其他人的代码将更易于阅读。此外,你忘记打印换行了。