Can';t接受多个命令行参数并分配给变量
我正在学习C,我不习惯指针和C处理字符串的方式。我正在尝试创建一个程序,该程序接受多个命令行参数并将它们分配给变量,以便以后使用它们。我可以让程序接受第一个参数并将其赋值为int。但是当我尝试接受第二个参数时,我得到了一个分段错误。我尝试过删除第二个变量(服务),然后将端口分配给argv[2]进行测试,但它不起作用。这是关于接受编译器不喜欢的第二个参数,但我无法理解它Can';t接受多个命令行参数并分配给变量,c,C,我正在学习C,我不习惯指针和C处理字符串的方式。我正在尝试创建一个程序,该程序接受多个命令行参数并将它们分配给变量,以便以后使用它们。我可以让程序接受第一个参数并将其赋值为int。但是当我尝试接受第二个参数时,我得到了一个分段错误。我尝试过删除第二个变量(服务),然后将端口分配给argv[2]进行测试,但它不起作用。这是关于接受编译器不喜欢的第二个参数,但我无法理解它 #include <stdio.h> int main(int argc, char *argv[]) {
#include <stdio.h>
int main(int argc, char *argv[]) {
int port = atoi(argv[1]);
char service = argv[2];
return 0;
}
#包括
int main(int argc,char*argv[]){
int port=atoi(argv[1]);
char-service=argv[2];
返回0;
}
当您编写char service=argv[2]时代码>,您正在为字符分配一个字符指针。您知道argv
是一个字符指针数组,因为您将它定义为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;
}
#包括
#包括
int main(int argc,char*argv[]){
如果(argc<3){
printf(“需要更多参数”);
返回1;
}
int port=atoi(argv[1]);
char*service=argv[2];
printf(“%s”,服务);//来自编辑
返回0;
}
您可能需要添加对argc
(即argc>=3
)值的检查,因为如果没有三个参数,它将seg fault
编辑(回复评论):
要打印服务,请使用:
printf(“%s”,服务)代码>
%s
指定您将打印一个字符串(char*
),您只需使用service
,因为您需要指定指针
编辑2:
如果不添加#include
,您将收到类似于“警告:C99中的'atoi'隐式声明无效”的消息,这也可能会根据编译器设置产生错误。。我想我错过了。我只是想做一个printf(“%s”,服务);编译器给了我printf语句的分段错误。就参数而言,argv[0]是文件名。所以我不需要那个部分,只需要用户在运行它时添加的内容。另外,总是比较if(argc<3){/*handleerror*/}
。您可以使用!=2
等,但验证参数的可用性。如果愿意,您甚至可以使用连续的三元运算符为每个参数提供默认值。使用这些注意事项更新了我的解决方案BrianJarcus和good addition@DavidC.Rankin谢谢David C.Rankin。我有我的原始代码的那一部分,但我精简了这段代码,使之成为我遇到的问题。马特·古德里奇,我可以打印端口,我的另一个问题是打印服务。这是真的。我还在学习C的工作方式。我更像是一个Python用户,一切都更简单。谢谢你的帮助。