Я пытаюсь узнать, как динамически выделять память для очень длинных строк, когда я читаю файл. Я ищу здесь и в Интернете, и я попробовал какой-то код.Чтение строки из текстового файла динамически
Во-первых, здесь моя первая нединамическая код:
char line[256];
file = fopen(inputFileName, "r");
// Here, of course I checked file is opened or not.
while (fgets(line, sizeof(line), file)) {
// do some operations
}
// Closing operations
Это работает для меня, когда я читал файлы. Но здесь строка должна быть равна или меньше 255 символов. Итак, я хочу прочитать, например, строку длиной 300 символов из файла.
Я попытался следующий код:
size_t maxl = 256;
//char line[256];
char *line = malloc(maxl * sizeof(char));
if(!line){
printf("Memory not allocated!!\n");
return -2;
}
file = fopen(inputFileName, "r");
while (fgets(line, sizeof(line), file)) {
while(line[strlen(line) - 1] != '\n' || line[strlen(line) - 1] != '\r'){
char *tmp = realloc (line, 2 * maxl);
//fgets(line, sizeof(line), file);
if (tmp) {
line = tmp;
maxl *= 2;
}
else{
printf("Not enough memory for this line!!\n");
return -3;
}
}
// do some operations
}
Я пытался реализовать ответы на этот вопрос на самом деле: Reading a line from file in C, dynamically
Но это всегда ввести «Недостаточно памяти» часть кода. Итак, что я делаю неправильно?
Благодарим вас за ответы и рекомендации.
Редактировать: Код обновлен в соответствии с вашими последними комментариями.
Редактировать 2: Код всегда читается теми же 3 символами из файла.
Представьте, что файл как:
abcdabcdabcd...
Переменной line
всегда «а» даже после операции повторного распределения.
Ваш цикл while будет только завершен, если вы прочитаете новый текст из файла внутри него, но вы этого не сделаете. – Ryan
Возможный дубликат [Как найти «sizeof» (указатель, указывающий на массив)?] (Http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointingtoto -an-array) –
'sizeof (char *)' Неверно. Вы выделяете массив 'char *'? № –