我正在学习C而且我不习惯指针和C处理字符串的方式。我正在尝试创建一个接受多个命令行参数的程序,并将它们分配给变量,以便我以后可以使用它们。我可以让程序接受第一个参数并将其指定为int。但是当我试图接受第二个论点时,我得到了一个SEGMENTATION FAULT。我已经尝试通过删除第二个变量(服务)然后将端口分配给argv [2]进行测试,但它不起作用。这是接受编译器不喜欢的第二个参数,但我无法弄明白。
import renderLine from '../../src/render/renderLine';
let line = renderLine({
rectangles: [
{
x: 25,
y: 50,
width: 100
}
]
});
答案 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
,因为您需要指定指针。
如果你不添加#include <stdlib.h>
,你会收到类似于&#34;警告的内容:隐含声明&#39; atoi&#39;在C99&#34;中无效,这也可能会产生错误,具体取决于您的编译器设置。