无法接受多个命令行参数并分配给变量

时间:2018-01-10 01:58:36

标签: c

我正在学习C而且我不习惯指针和C处理字符串的方式。我正在尝试创建一个接受多个命令行参数的程序,并将它们分配给变量,以便我以后可以使用它们。我可以让程序接受第一个参数并将其指定为int。但是当我试图接受第二个论点时,我得到了一个SEGMENTATION FAULT。我已经尝试通过删除第二个变量(服务)然后将端口分配给argv [2]进行测试,但它不起作用。这是接受编译器不喜欢的第二个参数,但我无法弄明白。

import renderLine from '../../src/render/renderLine';

let line = renderLine({
      rectangles: [
        {
          x: 25,
          y: 50,
          width: 100
        }
      ]
    });

1 个答案:

答案 0 :(得分:1)

当你编写char service = argv[2];时,你正在为char指定一个char指针。您知道argv是一个char指针数组,因为您将其定义为char *argv[]。只需添加char *service = argv[2];

即可解决问题

因此,您重写的代码可能如下所示:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    if (argc < 3) {
        printf("Requires more arguments");
        return 1;
    }

    int port = atoi(argv[1]);
    char *service = argv[2];   
    printf("%s", service); //From edit
    return 0;
}

您可能需要添加argc(即argc >= 3)值的检查,因为如果没有三个参数,它将会出错。

编辑(回复评论):

要打印服务,请使用:

printf("%s", service);

%s指定您将打印一串字符(char *)并只使用service,因为您需要指定指针。

编辑2:

如果你不添加#include <stdlib.h>,你会收到类似于&#34;警告的内容:隐含声明&#39; atoi&#39;在C99&#34;中无效,这也可能会产生错误,具体取决于您的编译器设置。