Подтвердить что ты не робот

Что такое функция c_str В С++

Я только что начал читать С++ и нашел С++ с богатыми функциями для манипуляции строками, которые C не имеет. Я читаю эту функцию и наткнулся на c_str(), и из того, что я понимаю, c_str преобразует строку, которая может быть завершена нулем или не может быть для строки с нулевым завершением. Это правда?

Может ли кто-нибудь предложить мне пример, чтобы я мог понять использование функции c_str?

4b9b3361

Ответ 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