Спецификатор формата %s
в
fprintf(outfile, "%s", inputline[j]);
ожидает переменную char *
, но вы фактически передаете char
(j th элемент массива inputline
) .
Причина, по которой возникает ошибка сегментации, состоит в том, что fprintf
пытается «получить доступ» к ячейке памяти, указанной переданным символом. И поскольку это, скорее всего, будет недопустимый адрес , ОС будет жаловаться на попытку доступа к памяти за пределами пространства , назначенного вашему приложению.
Вы можете либо напечатайте в файл char с помощью char , сохраняя for-l oop и используя %c
формат
for(int j=0; j<20; ++j)
{
fprintf(outfile, "%c", inputline[j]);
}
, или распечатайте всю строку, сохраняя формат %s
, передавая весь массив и избавившись от for-l oop:
fprintf(outfile, "%s", inputline);
Примечание: в первом случае все равно будет записано 20 символов. Во втором случае «длина + 1» символов из-за терминатора строки '\0'
.