Я хочу загрузить char из файла в 2D-массив. Но я не знаю длины отдельных строк (1 строка (1 слово) на 1 строку в массиве). Поэтому я выделил массив 1 * char *, а затем подсчитал символы в 1 строке и выделил их. Затем мне захотелось создать массив realloc
(2 * char *), чтобы он мог обрабатывать 2 строки. Здесь, во второй очереди, он всегда сбой (строка patterns=realloc(patterns, sizeof(*patterns)*patternCounter);
). Я знаю, что код не идеален (я не контролирую ошибки и т. Д.), Но я не думаю, что это поможет. Теперь это тоже не работает.C realloc 2D char array
Примечание: первый аргумент функции еще не
входного файла (1 слово в каждой строке, конец строки «\ п», так что последняя строка пуста)
woman
man
meat
animal
anim
Мой код используется
void failure(state *automaton, FILE *fpattern){
int patternCounter=0, charCounter=0, i;
char c;
char **patterns=NULL;
rewind(fpattern);
while((c=fgetc(fpattern))!=EOF){
charCounter++;
if(c=='\n') {
patternCounter++;
patterns=realloc(patterns, sizeof(*patterns)*patternCounter);
fseek(fpattern, -charCounter, SEEK_CUR);
for (i = 0; i < charCounter; i++) {
patterns[i]=malloc(1);
}
for (i = 0; i < charCounter-1; i++) {
patterns[patternCounter-1][i]=(char)fgetc(fpattern);
}
patterns[patternCounter-1][i]='\0';
fgetc(fpattern);
charCounter=0;
printf("%s\n", patterns[patternCounter-1]);
}
}
for (i = 0; i < patternCounter; i++) {
printf("%s\n", patterns[i]);
}
}
Я не понимаю, что не так. Отладка не помогла.
линии 'шаблонов [patternCounter-1] [I] = (символ) fgetc (fpattern);' должен вызвать переполнение буфера, так как только один байт выделяется 'patterns [patternCounter-1]'. Кроме того, выброс ранее прочитанных данных - очень плохая идея. – MikeCAT
Fmmm, на самом деле 'patterns [patternCounter-1]' может быть неинициализирован. – MikeCAT
Есть ли у вас максимальная длина слов? Это упростит вам задачу, потому что выделение байта по байтам не так велико ... – Holt