Почему функция fprintf () в моем коде не работает должным образом? - PullRequest
0 голосов
/ 14 апреля 2020

Первый fprintf () работает как надо, но второй выводит всю ерунду enter image description here

#include <string>

int main()
{
    FILE* f;
    fopen_s(&f, "text.txt", "w");
    std::string name = "hello";
    int area = 123;
    char ch = 'i';

    fprintf(f, "abc"); // OK

    fprintf(f, "|%-12s |%-5c |%-9d |", name.c_str(), area, ch); // not OK
}

1 Ответ

4 голосов
/ 14 апреля 2020

Спецификатор формата %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);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...