c_str
возвращает const char*
, который указывает на строку с нулевым символом в конце (то есть строку в стиле C).Это полезно, когда вы хотите передать «содержимое» ¹ std::string
функции, которая ожидает работать со строкой в стиле C.
Например, рассмотрите этот код:
std::string str("Hello world!");
int pos1 = str.find_first_of('w');
int pos2 = strchr(str.c_str(), 'w') - str.c_str();
if (pos1 == pos2) {
printf("Both ways give the same result.\n");
}
См. Это в действии .
Примечания:
¹ Это не совсем так, потому что std::string
(в отличие от Cстрока) может содержать символ \0
.Если это произойдет, код, который получает возвращаемое значение c_str()
, будет обманут, думая, что строка короче, чем она есть на самом деле, поскольку она будет интерпретировать \0
как конец строки.