fprintf: печатать шестнадцатеричную строку - PullRequest
0 голосов
/ 01 февраля 2019

Предположим, у меня есть шестнадцатеричная строка, которую я вычислил из набора байтов в определенном формате, который мне подходит:

std::string s("#00ffe1");

И я меньше, чем подписать его в std :: cout

std::cout << s;

//prints:
#00ffe1

Хотя мне нравится, как работает cout, для моих целей проще использовать fprintf, так как это выводит отформатированную строку, которая становится проще с fprintf.

Я пишу ту же строку из fprintf:

fprintf(stdout,"foo=%s",s);

// outputs:
G* // (i.e., nonsense)

Как вывести эту строку, используя fprintf?

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

std::string - это класс, а не «строка», как в C применяется термин (откуда взято fprintf).спецификатор формата %s ожидает указатель на массив с нулевым символом в конце char [].Используйте метод std::string c_str() для возврата строки с нулевым символом в конце и передайте , что в fprintf:

fprintf(..., s.c_str());
0 голосов
/ 01 февраля 2019

fprintf ожидает строку в стиле C, char*.std::string имеет метод c_str(), который возвращает только это:

fprintf(stdout, "foo=%s", s.c_str());
0 голосов
/ 01 февраля 2019

Вам нужно будет преобразовать std::string в const char* с нулевым символом в конце, используя c_str() функцию-член:

fprintf(stdout,"foo=%s",s.c_str());

Обратите внимание, что это все еще C ++, даже если вы используете fprintf().C не содержит тип данных std::string.

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