Строка в стиле C по сути является символьным массивом с нулевым символом в конце, в то время как std :: string в C ++ является хорошо спроектированным объектно-ориентированным классом / объектом строки. В большинстве случаев они НЕ взаимозаменяемы , и это зависит от того, какую операцию вы выполняете.Вы всегда можете позвонить std::string::c_str()
, чтобы получить внутреннюю строку в стиле C.
char * c
// OK because this makes c point to the starting address of "etcetc",
c = "etcetc";
// Compile-time error! You cannot add two pointers anyway because it's meaningless
c = c + "dddddd";
// OK, because string has constructor "string ( const char * s )"
string s1 = c;
string s2;
// OK, because string has "string& operator= ( const char* s )"
s2 = c;
Стоит отметить одну вещь:
// "etcetc" is a constant string here and you cannot modify it via pointer c
char * c = "etcetc";
// You can change string contents in two cases
char c[] = "etcetc";
string str = "etcetc";