为什么我使用 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
的值为 0
到 6
,但这不是问题。但是一旦 i
的值 7
或更大,那么 names[i]
就是 undefined,并且可以引用任何内存,包括无效内存。
你可能会“走运”,访问 names[7]
、names[8]
、names[9]
可能不会出现段错误……但在你的无限循环中迟早会发生段错误。
要解决此问题,请重新考虑循环何时停止。
我不认为它应该在 1 < 7
时停止。
我认为你应该寻找不同的停止条件。
我的程序应该打印出“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
的值为 0
到 6
,但这不是问题。但是一旦 i
的值 7
或更大,那么 names[i]
就是 undefined,并且可以引用任何内存,包括无效内存。
你可能会“走运”,访问 names[7]
、names[8]
、names[9]
可能不会出现段错误……但在你的无限循环中迟早会发生段错误。
要解决此问题,请重新考虑循环何时停止。
我不认为它应该在 1 < 7
时停止。
我认为你应该寻找不同的停止条件。