Как реализовать считывание строк из файла в массив строк?
На сколько я понял вы пытаетесь прочитать строку из файла и сохранить ее как элемент массива arr.
Но делаете это не правильно.
Ваша ошибка в том, что fscanf/fgets не выделяет память для хранения строки, она использует тот буфер, который вы ей предоставите. Но вы ничего не предоставляете.
Вам нужно для каждого элемента arr выделить память под строку:
arr[i] = (char*)malloc(sizeof(char) * BUFLEN);
где BUFLEN - некоторая целочисленная константа, обозначающая максимальную длину строки.
Тогда чтение из файла, как реализовано у вас пройдет.
В конце память выделенную с помощью malloc нужно освободить с помощью вызова free для каждого элемента массива arr.
И не забывайте обрабатывать ошибки выделения памяти и возвраты файловых операций.
fscanf со спецификатором формата "%s" считывает не строку, а слово - в строке может быть много слов. Для чтения строки используйте fgets, либо читайте посимвольно fgetc.
Когда заработает, потренируйтесь на файле, содержащем строку из более чем BUFLEN символов и попытайтесь найти корректный выход из этой ситуации.
fscanf замени наsize_t alloced = 0;
getline(&arr[k], &alloced, fp);
getline с сравнением с -1 можно поместить в while.