Так что да, видел много похожих вопросов на этот, но решил попробовать решить его по-своему. Получение огромного количества текстовых блоков после запуска (компилируется нормально).
Я пытаюсь получить строку неизвестного размера из файла. Думал о выделении точек размером 2 (1 символ и нулевой терминатор), а затем использовать malloc для увеличения размера массива символов для каждого символа, превышающего размер массива.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *pts = NULL;
int temp = 0;
pts = malloc(2 * sizeof(char));
FILE *fp = fopen("txtfile", "r");
while (fgetc(fp) != EOF) {
if (strlen(pts) == temp) {
pts = realloc(pts, sizeof(char));
}
pts[temp] = fgetc(fp);
temp++;
}
printf("the full string is a s follows : %s\n", pts);
free(pts);
fclose(fp);
return 0;
}
strlen(pts)
вы не знаете, что находится внутриpts
, и вы вызываетеstrlen()
на нем, что приводит к UB. Может быть,calloc()
будет лучшим выбором? - person babon   schedule 17.12.2019pts = realloc(pts, sizeof(char))
не расширяет буфер, а всегда выделяет 1 байт. Вы должны указать общую длину - person Ctx   schedule 17.12.2019while (fgetc(fp) != EOF) {
? Из файла что-то читается, но куда? - person Adrian Mole   schedule 17.12.2019fgetc()
дважды в одной итерации, когда вы присваиваетеpts[temp]
только один раз. - person babon   schedule 17.12.2019malloc
,realloc
иfopen
могут выйти из строя. Вы должны прочитать документацию по этим функциям (особенноrealloc
) и соответствующим образом обрабатывать их ошибки. - person Sean Bright   schedule 17.12.2019