Segmentation Fault mit strcmp in C?
War ich immer " Segmentation Fault (core dump) Fehlermeldung, wenn ich den code ausführen. Nach der Verwendung einige printf-Anweisung fand ich heraus, dass es ist ein Fehler in strcmp Teil, vielleicht, weil der Vergleich ein char mit einem string? Wie kann ich dieses Problem beheben?
//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;
}
verwenden strncmp() anstelle von strcmp() ich.e strlen(substring).
Diese:
und
Diese:
if(buff ==NULL) break;
wird nie zu einem Kabelbruch; Verwenden if (fgets(buff, sizeof buff, file) == NULL) break;
Sie auch nie überprüfen Sie die Ergebnisse Ihrer strstr
vor der Verwendung in der strcmp
.und
strcmp
und strstr
genug, nur der eine oder andere Duplikate.InformationsquelleAutor Gavin Z. | 2014-02-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie keine Garantie, dass
substring
ist nicht-NULL. So müssen Sie, um es zu testen:Andere Probleme:
In Ihrem code
if (buff == NULL) break;
wird nie Ursache eine Pause. Sie brauchen, um zu testen, den Rückgabewert vonfgets
. (Siehe WhozCraig Kommentar)fgets
hält die carriage-return, das ist wahrscheinlich nicht das, was Sie wollen.Den strstr/strcmp ist verwirrt: Sie wahrscheinlich wollen einfach nur
strcmp
oder vielleicht auch nurstrstr
.Wenn die Datei eine Zeile mit mehr als 1022 Zeichen, dann verpassen Sie vielleicht nach dem string.
strstr
/strcmp
Verwirrung, ich glaubststrncmp
würde das tun, was die OP wird für die aber schwer zu sagen.es gibt false zurück, wenn die Datei enthält die Zeichenfolge..
InformationsquelleAutor Joseph Quinsey
Array
buff
ist nicht null beendet. Sie tun müssen, die für diestr...
Familie von FunktionenPS: Erfahren Sie zum Einrücken von code
PPS: einen debugger Verwenden zu finden, der den Wert von
buff
InformationsquelleAutor Ed Heal
char *substring
in dem Fall, wo Sie haben eine übereinstimmungsubstring
hinweist, irgendwo in buf wenn keine übereinstimmungsubstring
verweistNULL
, und wenn Sie das tunstrcmp(buff,substring)
dies wird nie null sein.InformationsquelleAutor tesseract
wenn die
buff
ist nichtNULL
beendet, dann das problem wird kommen, in derstrcmp
. In Ihrem Fall, initialisieren Sie diebuff
- variable(null) an der Deklaration Teil. Andernfalls überprüfen Sie diefilesize
und fügen SieNULL
Charakter ambuff
:InformationsquelleAutor mahendiran.b