【问题标题】:Segmentation Fault (core dumped) when using strcmp使用 strcmp 时出现分段错误(核心转储)
【发布时间】:2021-03-17 14:18:55
【问题描述】:

我正在制作一个注册客户汽车并具有一些过滤选项的应用程序。我几乎可以轻松地完成所有这些操作,但是按模型过滤是行不通的。如果有人可以指导我做错了什么,将不胜感激。

gitlab中的完整代码:https://gitlab.com/salgadoth/car-ownership-in-c/-/blob/master/carownership.c

void listModel()
{
    int i, comp;
    char model[20];
    printf("\nTYPE IN DESIRED MODEL:\n");
    fflush(stdin);
    scanf("%s", &model);
    printf("DESIRED MODEL: %s\n\n", model);
    
    for(i = 0; i < counter; i++)
    {
        if(strcmp(model, car[i].model) == 0)
        {
            printf("\nBRAND: %s", car[i].brand);
            printf("\nMODEL: %s", car[i].model);
            printf("\nLICENSE PLATE: %s", car[i].license_plate);
            printf("\nYEAR OF FABRICATION: %d\n", car[i].year);
            printf("---------------------------\n");
        }
        else
        {
            printf("\nERROR - NO CAR FOUND");
            return 1;
        }
    }
}

【问题讨论】:

  • 永远不要使用fflush(stdin) - 它充其量是由实现定义的。而且你不应该在scanf("%s", &amp;model); 中有&amp;
  • @AndreasWenzel 我使用缩进,但是当我将代码复制/粘贴到此处时,它丢失了所有缩进:/
  • @user3121023 car 是一个结构体
  • 请编辑问题以在文本和问题中包含足够的代码,以便我们可以编译并复制错误。不要包含复制错误不需要的任何代码,最好将任何输入代码替换为仅触发错误的代码。
  • @ThiagoSalgado:您可以将代码括在`字符中以将其标记为代码。这是在 cmets 中标记代码的唯一方法。在实际问答中,还可以通过其他方式标记代码。

标签: c string strcmp


【解决方案1】:

你永远不会初始化counter,所以没有什么能阻止你的for循环运行到你没有初始化的对象中。如果model 不包含有效字符串,则strcmp 可能出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多