Спецификатор формата %s
ожидает массив с нулевым символом в конце char
, а не std::string
. Таким образом, поведение fprintf
не определено.
Использование:
fprintf(f, "|%-12s |%-5c |%-9d |", name.c_str(), area, ch);
, так как функция c_str()
возвращает массив с нулевым символом в конце.
Кроме того, строки формата для других типов также кажутся неправильными. Чтобы напечатать int
, спецификатор формата равен %d
, а не %c
, а формат, указанный для символа, равен %c
, а не %d
.
Таким образом, последний вызов fprintf
должно быть:
fprintf(f, "|%-12s |%-5d |%-9c |", name.c_str(), area, ch);