std::string
- это класс C ++. Так что это не работает, потому что:
printf
- это чистая функция C, которая знает, как обращаться с примитивными типами (int
, double
, char *
и т.
printf
- это переменная функция . Передача типа класса в функцию с переменными значениями приводит к неопределенному поведению . 1
Если вы хотите отобразить строку, используйте std::cout
:
std::cout << key << "\n";
Если вы просто должны использовать printf
, то это должно работать:
printf("%s\n", key.c_str());
c_str
является функцией-членом, которая возвращает строку в стиле C (то есть a const char *
). Имейте в виду, что у него есть некоторые ограничения; Вы не можете изменить или удалить объект string
между вызовом c_str()
и использованием результата:
const char *p = key.c_str();
key = "something else";
printf("%s\n", p); // Undefined behaviour
1. Или, возможно, определяется реализацией , я не помню. В любом случае, это не закончится хорошо.