簡體   English   中英

在C中使用strcmp進行分段錯誤?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM