文件名为“选项”。每当我在控制台中运行这段代码时,这里我有一些可能性:
第一个月./options -c -E
我得到消息:"Segmentation fault (core dumped)"
真的不知道该怎么做,我可能需要一些帮助。
#include <stdio.h>
int main(int argc, char *argv[]){
int i;
for(i = 0; i < argc; i++){
if(strcmp((argv[i],"-c") == 0)){
printf("Argumento %d es %s\n", i, "Compilar");
}
else if(strcmp((argv[i],"-E") == 0)){
printf("Argumento %d es %s\n", i, "Preprocesar");
}
else if(strcmp((argv[i],"-i") == 0)){
printf("Argumento %d es %s\n", i, "Incluir " );
}
}
}
2条答案
按热度按时间nhhxz33t1#
这段代码有几个问题。首先,你应该启用编译器警告(并且总是检查它们!)。如果你这样做了,你会看到如下所示的内容:
警告:函数
strcmp
的隐式声明这是一个非常重要的警告:这意味着您忘记了正确的
#include
,编译器将只是猜测,在本例中是错误的。如果你看一下你喜欢的C文档,你会发现
strcmp
需要#include <string.h>
,如果你添加了它,你会得到一条有用的消息,这次是一个硬错误:错误:函数
strcmp
的参数太少还有几个额外的有用警告:
警告:逗号表达式的左操作数无效警告:传递“strcmp”的参数1使指针从整数开始而不进行强制转换
记住这一点,仔细检查一下函数调用:
strcmp()
只有一个参数,它是比较(argv[i],"-c") == 0
的结果,在比较"-c"
(忽略逗号运算符的左边)和0
(NULL
指针)时,可能需要编写:y53ybaqx2#
您需要对代码进行以下几项更改:
1.添加
string.h
标头2.重写
strcmp
行:现在它是-strcmp((argv[i],"-c") == 0)
以上变更:
输出: