Что такое функция c_str В С++
Я только что начал читать С++ и нашел С++ с богатыми функциями для манипуляции строками, которые C не имеет. Я читаю эту функцию и наткнулся на c_str()
, и из того, что я понимаю, c_str
преобразует строку, которая может быть завершена нулем или не может быть для строки с нулевым завершением. Это правда?
Может ли кто-нибудь предложить мне пример, чтобы я мог понять использование функции c_str?
Ответы
Ответ 1
c_str
возвращает a 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
как конец строки.
Ответ 2
В С++ вы определяете свои строки как
std::string MyString;
вместо
char MyString[20];
.
При написании кода на С++ вы сталкиваетесь с некоторыми функциями C, которые требуют параметра C в качестве параметра.
Как ниже:
void IAmACFunction(int abc, float bcd, const char * cstring);
Теперь есть проблема. Вы работаете с С++ и используете строковые переменные std::string
. Но эта функция C запрашивает строку C. Как вы преобразовываете std::string
в стандартную строку C?
Вот так:
std::string MyString;
// ...
MyString = "Hello world!";
// ...
IAmACFunction(5, 2.45f, MyString.c_str());
Это то, что c_str()
для.
Обратите внимание, что для строк std::wstring
c_str()
возвращает a const w_char *
.
Ответ 3
Большинство OLD С++ и c-функций при работе со строками используют const char*
.
С STL и std::string
вводится string.c_str()
, чтобы иметь возможность конвертировать из std::string
в const char*
.
Это означает, что если вы обещаете не менять буфер, вы сможете использовать только содержимое строки для чтения. PROMISE = const char *
Ответ 4
c_str() преобразует строку С++ в строку C-стиля, которая по сути является байтом с нулевым завершением. Вы используете его, когда хотите передать строку С++ в функцию, которая ожидает строку C-стиля (например, многие функции Win32 API, функции стиля POSIX и т.д.).
Ответ 5
Он использовал, чтобы сделать std::string
совместимым с C-кодом, для которого требуется null-terminated char*
.
Ответ 6
В программировании на C/С++ существуют два типа строк: строки C и стандартные строки. С заголовком <string>
мы можем использовать стандартные строки. С другой стороны, строки C представляют собой всего лишь массив обычных символов. Итак, чтобы преобразовать стандартную строку в строку C, мы используем функцию c_str()
.
например
// a string to a C-style string conversion//
const char *cstr1 = str1.c_str();
cout<<"Operation: *cstr1 = str1.c_str()"<<endl;
cout<<"The C-style string c_str1 is: "<<cstr1<<endl;
cout<<"\nOperation: strlen(cstr1)"<<endl;
cout<<"The length of C-style string str1 = "<<strlen(cstr1)<<endl;
И выход будет,
Operation: *cstr1 = str1.c_str()
The C-style string c_str1 is: Testing the c_str
Operation: strlen(cstr1)
The length of C-style string str1 = 17