Вам потребуется выделить память для строк с нулевым завершением.
На данный момент вы только выделения памяти для 4 char *
, но эти указатели являются неинициализированным и для этого приведет к UB (неопределенное поведение) при попытке записать данные в памяти, на которую указывает им.
Рабочий пример фрагмент кода
Использование «% 127s» в приведенном ниже фрагменте кода, чтобы помешать нам писать за пределы выделенной памяти. С форматированной строкой, о которой идет речь, мы будем в наибольшей мере читать/записывать 127 байтов + нуль-терминатор.
Пожалуйста, помните, что дальнейшие проверки ошибок должны быть реализованы, если это необходимо использовать в реальной жизни.
- Проверьте, что
file_handle
действительно действует после того, как попытка открыть файл
- Проверьте, чтобы увидеть, что
malloc
действительно выделяют просил модуля памяти
- Проверьте, чтобы
fscanf
прочитать нужный вход
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int
main (int argc, char *argv[])
{
int i;
char * lines[4];
FILE *file_handle = fopen ("my.txt", "r");
for (i =0; i < 4; ++i) {
lines[i] = malloc (128); /* allocate a memory slot of 128 chars */
fscanf (file_handle, "%127s", lines[i]);
}
for (i =0; i < 4; ++i)
printf ("%d: %s\n", i, lines[i]);
for (i =0; i < 4; ++i)
free (lines[i]); /* remember to deallocated the memory allocated */
return 0;
}
выпуск
0: Red
1: Green
2: Blue
3: Yellow
ошибка сегментации в 'fscanf (file_handle,"% 127s ", lines [i]);' –