我设置了以下代码,它实际上编译没有错误,但它一直崩溃我开始它。该代码应该从.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");
}
}
提前感谢您的帮助!
答案 0 :(得分:0)
首先:始终检查open()
的结果然后:\ n可能是两个字符(CR / LF),因此与'\ n'比较不合适
答案 1 :(得分:0)
除了一些错误的错误检查,我发现了以下错误:
size_t Zeilen_anzahl = 0; // Forgot to initialize
size_t Zeilen_groesse = 1; // Forgot to initialize
char **Zeile = NULL;
char puffer[512];
Zeile = malloc(Zeilen_groesse * sizeof(*Zeile)); // I had to add this, not sure why. realloc should work on NULL pointer
while(fgets(puffer, sizeof(puffer), datei) != NULL) {
if (Zeilen_anzahl >= Zeilen_groesse - 1) { // Off by one in size check