【发布时间】:2014-02-09 03:56:20
【问题描述】:
我在运行代码时遇到分段错误(核心转储)错误。使用一些 printf 语句后,我发现 strcmp 部分有错误,可能是因为将字符与字符串进行比较?我该如何解决这个问题?
// 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;
}
【问题讨论】:
-
使用 strncmp() 代替 strcmp() 即 strlen(substring)。
-
这个:
if(buff ==NULL) break;将永远导致中断;使用if (fgets(buff, sizeof buff, file) == NULL) break;在strcmp中使用它们之前,您也永远不会检查strstr的结果。 -
and
strcmpandstrstr只需要一个或另一个重复项就足够了。
标签: c string segmentation-fault strcmp