该文件称为“选项”。 每当我在控制台中运行此代码时,这里就有一些可能性:
./options -c
./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 " );
}
}
}
答案 0 :(得分:2)
此代码存在多个问题。首先,您应该启用编译器警告(并始终对其进行检查!)。如果这样做,您会看到类似以下的内容:
警告:函数
strcmp
的隐式声明
这是一个非常重要的警告:这意味着您忘记了正确的#include
,并且在这种情况下,编译器只会猜测错误。
如果您看喜欢的C文档,您会发现strcmp
需要#include <string.h>
。如果添加了该内容,则会收到一条有用的消息,这次是一个严重错误:
错误:函数
strcmp
的参数太少
还有一些其他有用的警告:
警告:逗号表达式的左操作数无效 警告:传递“ strcmp”的参数1会使指针从整数开始而无需强制转换
考虑到这一点,请仔细检查您的函数调用:
if(strcmp((argv[i],"-c") == 0))
strcmp()
只有一个参数,这是此比较(argv[i],"-c") == 0
的结果,在此比较中,您将字符串"-c"
(逗号运算符的左侧被忽略)与0
是NULL
指针。您可能要写:
if (strcmp(argv[i], "-c") == 0)
答案 1 :(得分:1)
您需要对代码进行几处更改:
1.添加string.h
标头
2.重写strcmp
行:现在是-strcmp((argv[i],"-c") == 0)
进行了上述更改:
#include <stdio.h>
#include <string.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 " );
}
}
}
输出:
$ ./a.out -E
Argumento 1 es Preprocesar