Я создал функцию для чтения данных из текстового файла.Функция считывает данные в буфер, а затем копирует их в отдельную переменную по мере заполнения буфера.
Я заметил, что переменная line_size (см. Ссылку ниже) выходит за пределы фактического размера строки, т.е. значение line_size равно 106, тогда как фактическая длина моегострока состоит из 103 символов.
Итак, для отладки я добавил оператор печати, который соответствовал каждому прочитанному символу текущему размеру буфера: printf("%c\t%i\n",c,current_buffer_size);
Как только я запустил программу, оказалось, что fgetc читает некоторые «мусорные» символы (см. Скриншот ниже).
(ссылка: char * line сохраняет данные из буфера, intline_size отслеживает размер символа * line)
Примечание : значение FILE_BUFFER
равно 128
char *readline(FILE *fptr)
{
char buffer[FILE_BUFFER];
char *line = malloc(sizeof(char));
int current_buffer_size, line_size = 0;
int c;
int is_reading = 1;
while(is_reading)
{
current_buffer_size = 0;
while(current_buffer_size < FILE_BUFFER)
{
c = fgetc(fptr);
if ( c == '\n' || feof(fptr))
{
is_reading = 0;
break;
}
buffer[current_buffer_size] = c;
current_buffer_size += 1;
printf("%c\t%i\n",c,current_buffer_size);
}
line_size += current_buffer_size;
line = (char *) realloc(line,line_size*sizeof(char));
memcpy(&line[line_size-current_buffer_size], buffer, current_buffer_size);
}
if (line_size == 0) return NULL;
line = (char *) realloc(line,(line_size+1)*sizeof(char));
line[line_size] = 0;
printf("\n%i\n",line_size); // final size of the line
return line;
}
В чем может быть причина этого?