C语言使用strcmp时出现segmentation fault段错误是什么原因?
错误原因
你遇到的段错误是数组越界访问导致的,核心问题出在for循环的判断条件写错:
- 代码中循环条件写为
1 < 7,属于恒成立的永真表达式,会导致循环无限执行 names数组仅有7个元素,合法下标范围是0~6,当变量i自增到7及以上时,访问names[i]就属于越界访问不属于程序合法权限的内存空间,触发系统内存保护机制,抛出段错误。
修复方案
将for循环的判断条件修改为判断i是否小于数组长度即可,参考修改后的代码:
#include <cs50.h> #include <stdio.h> #include <string.h> int main(void) { string names[] = {"Bill", "Charlie", "Fred", "George", "Ginny", "Percy", "Ron"}; // 修改循环条件为i < 数组元素个数即可 for (int i = 0; i < sizeof(names)/sizeof(names[0]); i++) { if(strcmp(names[i], "Angle") == 0 ) { printf("Found\n"); return 0; } } printf("Not found\n"); return 1; }
修改后循环只会遍历数组的7个合法元素,遍历完成后没有匹配项就会正常输出Not found。
内容的提问来源于stack exchange,提问作者Sherri
相关产品推荐
相关产品推荐

