[英]Segmentation Fault using strcmp in C?
运行代码时出现分段错误(核心转储)错误。 使用一些printf语句后,我发现strcmp部分存在错误,可能是因为比较char和字符串? 我该如何解决?
// this function checks if the file contains the *string
bool checkIfMatch(char *string, FILE *file) {
while (true) {
char buff[1024];
fgets(buff, sizeof buff, file);
if (buff == NULL)
break;
char *substring=strstr(buff, string);
if ((strcmp(buff, substring)) == 0)
return true;
}
return false;
}
您不能保证substring
为非NULL。 因此,您需要对其进行测试:
bool checkIfMatch(char *string, FILE *file) {
char buff[1024];
while (fgets(buff, sizeof buff, file)) {
char *substring=strstr(buff, string);
if (substring && !strcmp(buff, substring))
return true;
}
return false;
}
其他问题:
在您的代码中, if (buff == NULL) break;
永远不会造成中断。 您需要测试fgets
的返回值。 (请参阅WhozCraig的评论)
fgets
保留回车符,这可能不是您想要的。
strstr / strcmp感到困惑:您可能只想要strcmp
,或者只是strstr
。
如果文件的行长超过1022个字符,则可能会找不到字符串。
数组buff
不能为null终止。 您需要这样做是为了str...
功能。
PS:学习缩进代码PPS:使用调试器查找buff
的值
如果buff
不是NULL
终止的,则问题将出现在strcmp
。 在您的情况下,请在声明部分将buff
变量初始化为零。 否则请检查filesize
,然后在buff
处添加NULL
字符:
[filesize+1]='\0'.
char *substring=strstr(buff, string);
if ((strcmp(buff, substring)) == 0)
return true;
char *substring
在你有一个匹配的情况下, substring
在里面BUF某处指着如果没有匹配substring
指向NULL
,当你这样做strcmp(buff,substring)
这将永远是零。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.