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

标签 c malloc argc

我基本上想从命令行读取用户输入的值并将它们放入数组中。到目前为止,我的尝试如下

#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 循环将重复三次,这没有意义,它给出的值完全错误。抱歉,我在这方面有点业余。提前致谢!

最佳答案

您的代码有很多问题,其他人已经提到了一些问题,例如 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。您不能只将字符串分配给 double 。您需要做的是将字符串转换为 double,例如:

sscanf(argv[tmp+1], "%lf", &x[tmp]);

x[tmp] = strtod(argv[tmp+1]);

提示:始终使用常见警告编译您的代码。对于 gcc,这将是 -Wall 命令行参数。编译器可以告诉您其中的许多错误。

关于c - 将未指定数量的命令行输入放入 C 中的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21203971/

相关文章:

c - 关于 'main(int argc, char *argv[])'

c - 为什么 argc 与 strlen(argv[i]) 不同?

c - 在 C 命令行参数中为 argv 分配的缓冲区大小

C fgets 与 fgetc 读取行

c - 在C中调用函数时,是否使用了操作系统的堆栈,堆栈的大小是否固定?

c++ - 从 Eclipse IDE 运行 C 程序时如何为其指定命令行参数

c - 哪种方式为字符串保留内存?

c - 如何为查询字符串正确分配内存?

c - DOS环境下如何读取串口数据

c++ - 空闲分配的内存生成异常 - C++