我得到了下面的代碼設置,它實際上編譯沒有錯誤,但它始終崩潰,我開始它。該代碼應該讀取並保存.txt文件中的行,並查找它顯示的最長副本。由於.txt文件大約有127.000個字符,因此我在分配內存方面遇到了一些問題,但問題可能與此有關。爲什麼具有以下代碼的程序崩潰?如何解決這個問題?
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <math.h>
# include <stddef.h>
# include <ctype.h>
main(){
printf("test\n");
FILE *Datei;
size_t i;
size_t j;
Datei = fopen("Eingabe.txt", "r");
//Zeilen einlesen
size_t Zeilen_anzahl;
size_t Zeilen_groesse;
char **Zeile = NULL;
char puffer[512];
while(fgets(puffer, sizeof(puffer), Datei) != NULL) {
if (Zeilen_anzahl >= Zeilen_groesse) {
Zeilen_groesse = Zeilen_groesse*2 + 1;
Zeile = realloc(Zeile, Zeilen_groesse * sizeof(*Zeile)); //Fehlerfall?
}
size_t laenge = strlen(puffer);
if (laenge > 0 && puffer[laenge - 1] == '\n') puffer[--laenge] = '\0';
laenge++;
Zeile[Zeilen_anzahl] = malloc(laenge);
memcpy(Zeile[Zeilen_anzahl], puffer, laenge);
Zeilen_anzahl++;
}
fclose(Datei);
//Duplikat suchen
size_t laengste = 0;
size_t index = 0;
for(i = 0; i < Zeilen_anzahl; i++) {
size_t kleinste = strlen(Zeile[i]) + 1;
if (kleinste <= laengste) continue; //kleiner als längstes Duplikat
for(j = 0; j < i; j++) {
if (strcmp(Zeile[i], Zeile[j]) == 0) { //Duplikat gefunden
laengste = kleinste;
index = i;
break; //überspringen
}
}
}
if (laengste > 0) {
printf("Längstes Duplikat ist: \"%s\".\n");
}
else {
printf("Keine Duplikate gefunden.\n");
}
}
在此先感謝您的幫助!
編輯:我很想保持這樣的代碼,因爲我基本上明白髮生了什麼,請不要提出任何其他功能使用有更好的表現。在我解決這個問題之前,我很想有一個工作計劃。 – user3195768
崩潰時顯示什麼錯誤? –
此外,您還沒有爲'printf(「LängstesDuplikat ist:\」%s \「。\ n」)提供額外的字符串參數;' –