gpt4 book ai didi

c - else 语句的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:55 24 4
gpt4 key购买 nike

当我使用这个编译命令时:

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 值。例如:

if ((argc >= 2) && (strcmp(argv[1], "help") == 0)) {
help();
} else if(argc == 4) {

如果 argc 不至少为 2,则 argv[1] 将为 NULL 且 strcmp 会出现段错误。 (注意:argv[0] 是命令名称本身,可执行文件的名称,因此如果您正在执行,arvc 应始终至少为 1您从命令行发出的命令。)

关于c - else 语句的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28522504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com