我基本上想要从用户输入的命令行中读取值并将它们放入数组中。到目前为止,我对此的尝试如下
#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循环将重复三次,这是没有意义的,它给出的值完全错误。对不起,我有点像业余爱好者。提前谢谢!
答案 0 :(得分:2)
您的代码存在许多问题,有些问题已经被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
。您不能只将字符串分配给double。您需要做的是将字符串转换为double,例如:
sscanf(argv[tmp+1], "%lf", &x[tmp]);
或
x[tmp] = strtod(argv[tmp+1]);
提示:始终使用常见警告编译代码。使用gcc,这将是-Wall
命令行参数。编译器可以告诉你许多这些错误。
答案 1 :(得分:1)
首先,main的签名应为
int main(int argc, char *argv[])
然后你传递字符串。您需要将它们转换为双打sscanf
才能执行此操作 - 请参阅http://linux.die.net/man/3/sscanf
答案 2 :(得分:0)
printf("%lf\n", argc)
会导致内存访问冲突,因为:
argc
是一个整数类型(4个字节)。
printf("%lf...
尝试读取8个字节。
您必须将其更改为printf("%d\n", argc)
。
答案 3 :(得分:0)
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]没有输入。