【发布时间】:2015-02-15 02:39:21
【问题描述】:
当我使用这个编译器命令时:
gcc ../main.c -w -o sc
还有这段代码:
/* sc - a simple calculator */
/* glibc */
#include <stdio.h>
#include <stdlib.h>
/* global variables */
int ans;
void help()
{
printf("Type in an equation (2 + 2) and it will solve it. (4)\n");
printf("-- remember spaces between characters.\n");
}
void error()
{
printf("That value is not accepted.\n");
printf("---------------------------\n");
help();
}
int main(int argc, char *argv[])
{
if(strcmp(argv[1], "help") == 0) {
help();
} else if(argc == 4) {
if( /* Removed calculator function */ (argc, argv) != 0) {
error();
return 2;
}
} else {
error();
return 1;
}
return 0;
}
当我在没有任何参数的情况下运行二进制文件时,这是输出:
Segmentation fault (core dumped)
为什么它落到else时会失败,而不是当它有参数时?
【问题讨论】:
-
如果您没有传递参数,那么当
argv[1]为NULL 时,您正在执行strcmp(argv[1], "help"),这很糟糕。您需要检查argc的参数,并避免访问不存在的argv值。 -
这个
(argc, argv) != 0不比较这两个值。
标签: c gcc memory arguments argv