为什么我使用 strcmp 会出现分段错误?

Why am I getting segmentation fault using strcmp?

我的程序应该打印出“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”。好迷茫...

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

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

与此同时,变量 i 每次循环都会递增。虽然 i 的值为 06,但这不是问题。但是一旦 i 的值 7 或更大,那么 names[i] 就是 undefined,并且可以引用任何内存,包括无效内存。

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

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