【问题标题】:Why am I getting segmentation fault using strcmp? [closed]为什么使用 strcmp 会出现分段错误? [关闭]
【发布时间】:2021-07-30 19:58:44
【问题描述】:

我的程序应该打印出“Not found”而不是“Segmentation fault”,这是怎么回事?

这是我的代码

#include <cs50.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    string names[] = {"Bill", "Charlie", "Fred", "George", "Ginny", "Percy", "Ron"};

    for (int i = 0; 1 < 7; i++)
   {
      if(strcmp(names[i], "Angle") == 0 )
      {
          printf("Found\n");
          return 0;
      }
   }
   printf("Not found\n");
   return 1;
}

我用 make 编译了程序,当我运行它时,我得到了“Segmentation fault”。好迷茫……

【问题讨论】:

  • 提示:您在for (int i = 0; 1 &lt; 7; i++) 中有错字,导致它变成无限循环。当您读取 names 数组的末尾时,您会因分段错误而崩溃。
  • 1 &lt; 7 - 这就是为什么不建议将i 用于变量的原因。
  • @EugeneSh。祝整个行业停止运转。
  • @Barmar 可以从自己做起。 ii 工作正常
  • 请在以后的问题中添加cs50标签(在您的课程中)。

标签: c cs50


【解决方案1】:

1 &lt; 7 不再为真时,您的 for 循环将停止。

1总是小于7
你的循环永远不会结束。

与此同时,变量i 将在每次循环中递增。虽然i 的值有06,但这不是问题。但是一旦i 的值大于等于7,那么names[i]未定义,并且可以引用任何内存,包括无效内存。

您可能会“幸运”并访问names[7]names[8]names[9] 可能不会出现段错误……但在无限循环中迟早会发生段错误。

要解决此问题,请重新考虑您的循环应该何时停止。
我认为它不应该在 1 &lt; 7 时停止。
我认为你应该寻找不同的停止条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2011-04-23
    相关资源
    最近更新 更多