繁体   English   中英

将未指定数量的命令行输入放入C中的数组

[英]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); 是不正确的。 argcint ,您需要使用%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)将导致内存访问冲突,因为:

  1. argc是整数类型(4个字节)。

  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM