std::string
- это объект C ++, который нельзя передать большинству API.Большинство API принимают char*
, как вы заметили, что очень отличается от std::string
.Однако, поскольку это является общей потребностью, std::string
имеет функцию для этого: c_str
.
std::string input;
const char* ptr = input.c_str(); //note, is const
В C ++ 11 теперь также безопасно делать это:
char* ptr = &input[0]; //nonconst
, и вы можете изменять символы, но размер является фиксированным, и указатель становится недействительным, если вы вызываете любой мутирующий член std::string
.
Что касается кода, который вы разместили,"THIS IS A TEST"
имеет тип const char[15]
размером 15 байт.Однако char* input
имеет тип char*
(очевидно), который имеет размер 4 в вашей системе.(В других системах это могут быть и другие размеры)
Чтобы найти размер c-строки, на которую указывает указатель char*
, вы можете вызвать strlen(...)
, если она заканчивается на NULL.Он вернет количество символов перед первым нулевым символом.