У вас есть массив размером 3 указателей на символы.Эти указатели не указывают на какую-либо действительную память, где вы могли бы хранить некоторые из тех строк, в которых вы читаете. Попытка записи в недействительную память вызывает UB.Здесь UB проявляется в форме ошибки сегментации (скорее всего потому, что вы пытаетесь записать в место, где у вас нет контроля).
Сначала попробуйте выделить немного памяти: скажем, достаточно большой буфер для чтенияцелая строка (или самая большая строка, с которой вы столкнетесь).Прочитайте, выделите direction
член массива и затем скопируйте его следующим образом:
char *directions[ 3 ];
const MAX_LINE_SIZE = 256;
char line[ MAX_LINE_SIZE ];
for (size_t nstr = 0; nstr < 3; ++nstr) {
if (fgets( line, MAX_LINE_SIZE, stdin ) != NULL) {
directions[ nstr ] = malloc( strlen( line ) );
strcpy( directions[ nstr ], line );
}
printf( "%s\n", directions[ nstr ] );
}