[英]Placing an unspecified amount of command line inputs into an array in C
我本质上想从用户输入的命令行中读取值,并将其放入数组中。 到目前为止,我的尝试如下
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define w 1.0
int main(int argc, char argv[])
{
int tmp;
double *x, *v, *m, *k, *R;
x = malloc((argc-1)*sizeof(double));
printf("%lf\n", argc);
for(tmp=0; tmp<argc-1; tmp++)
{
x[tmp] = argv[tmp+1];
printf("%lf\n", x[tmp]);
}
}
argc值的打印等于0,但是for循环将重复3次,这是没有意义的,它给出的值完全是错误的。 对不起,我对此有些业余。 提前致谢!
您的代码有很多问题,有些已经被其他人提及,例如argv
,需要具有char *[]
类型。
首先,如果argc
为1,则您的malloc
将失败,因为分配大小为0的内存没有意义。
其次, printf("%lf\\n", argc);
是不正确的。 argc
是int
,您需要使用%d
进行打印。 您看到0的原因是错误的。
第三, x[tmp] = argv[tmp+1];
也是不正确的。 argv[tmp+1]
是一个char *
,这意味着它是一个字符串。 x[tmp]
是double
。 您不能只是将字符串分配给双精度型。 您需要做的是将字符串转换为双精度型,例如:
sscanf(argv[tmp+1], "%lf", &x[tmp]);
要么
x[tmp] = strtod(argv[tmp+1]);
提示:始终使用常见警告来编译代码。 对于gcc,这将是-Wall
命令行参数。 编译器可以告诉您许多这样的错误。
首先,main的签名应为
int main(int argc, char *argv[])
然后,您将传递字符串。 您需要将它们转换为双精度sscanf
将执行此操作-参见http://linux.die.net/man/3/sscanf
printf("%lf\\n", argc)
将导致内存访问冲突,因为:
argc
是整数类型(4个字节)。
printf("%lf...
尝试读取8个字节。
您必须将其更改为printf("%d\\n", argc)
。
int main(int argc, char* argv[])
{
int i;
//calloc = malloc for N elemnts of given size
double* myArray = (double*)calloc(argc, sizeof(double));
//Check out arg 0!
for (i = 0; i<argc; i++)
{
printf("arg [%d] = %s\n",i,argv[i]);
}
for (i = 1; i<argc; i++)
{
sscanf(argv[i], "%lf", &myArray[i]);
printf("myArray[%d] = %f\n",i, myArray[i]);
}
//avoid memory leak
free(myArray);
}
我看到我的答案来得有点晚,反正我只是想指出arg [0]没有输入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.