Эта программа возвращает «Ошибка сегментации: 11» при запуске. Компилятор (GCC) не возвращает никаких ошибок или предупреждений.C - «Ошибка сегментации: 11»
#include <stdio.h>
#include <string.h>
typedef struct {
char day[3];
char month[3];
char year[5];
} DATA;
DATA *data;
int main()
{
FILE *file;
char line_buffer[BUFSIZ];
if (!(file = fopen("file.dat", "rt")))
{
printf ("Something went wrong while opening the file.\n");
}
else
{
int line_number = 0;
while (fgets(line_buffer, sizeof(line_buffer), file))
{
++line_number;
if (line_number == 1) { strncpy(data->day, line_buffer, 2); }
else if (line_number == 2) { strncpy(data->month, line_buffer, 2); }
else if (line_number == 3) { strncpy(data->year, line_buffer, 4); }
}
printf("Content: %s-%s-%s\n", data->day, data->month, data->year);
}
return 0;
}
Содержание file.dat является:
12
08
1990
Я отлажена его с помощью GDB и это результат:
(gdb) run
Starting program: /Users/macuser/Desktop/Primitiva/Proyecto/a.out
Program received signal SIGSEGV, Segmentation fault.
0x00007fff949413a0 in _dispatch_queue_attrs() from /usr/lib/system/libdispatch.dylib
Что это значит и что я могу сделать, чтобы решить проблему? Спасибо!
Работал! Но в чем разница между использованием указателя или отсутствием ошибки сегментации? – mariec
@mariec Я не понимаю ваш вопрос. –
@mariec, я обновил ответ с помощью указательной версии программы, проверил источник, у него есть комментарии, чтобы вы знали, как это работает. –