[英]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.