У меня есть C++ string
. Я должен передать эту строку функции, принимающей a char*
параметр (например - strchr()
).
a) Как я получаю тот указатель?
b) Есть ли некоторый функциональный эквивалент strschr()
это работает на C++ strings
?
C
объекта
объекта C ++
string
, используйте функцию c_str
. char
в объекте строка
, используйте функцию
find_first_of
. Пример:
string s = "abc";
// call to strlen expects char *
cout<<strlen(s.c_str()); // prints 3
// on failure find_first_of return string::npos
if(s.find_first_of('a') != string::npos)
cout<<s<<" has an a"<<endl;
else
cout<<s<<" has no a"<<endl;
Примечание: я привел strlen
просто пример функции, которая принимает char *
.
std::string yourString("just an example");
char* charPtr = new char[yourString.size()+1];
strcpy(charPtr, yourString.c_str());
Удивительно, но std:; string имеет гораздо больше возможностей, чем строки в стиле C. Возможно, вам понадобится метод find_first_of () . В общем, если вы обнаружите, что используете функции strxxx () в C ++ std :: strings, вы почти наверняка делаете что-то не так.
Как и большая часть стандартной библиотеки C ++, строковый класс представляет собой сложный зверь. Чтобы извлечь из этого максимум пользы, вам действительно понадобится хороший справочник. Я рекомендую Стандартную библиотеку C ++ Николая Йосаттиса.
Если вы просто хотите присвоить строковый литерал pw, вы можете сделать это как
char *pw = "Hello world";
Если у вас есть C ++ std :: string объект , значение которого вы хотите присвоить pw , вы можете сделать это как
char * pw = some_string.c_str ()
Однако значение, на которое указывает pw будет действителен только в течение времени жизни some_string.
Подробнее здесь:
Как присвоить строку char * pw в C ++
GoodLUCK !!
Возможно, этот пример вам поможет
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str ("Replace the vowels in this sentence by asterisks.");
size_t found;
found=str.find_first_of("aeiou");
while (found!=string::npos)
{
str[found]='*';
found=str.find_first_of("aeiou",found+1);
}
cout << str << endl;
return 0;
}
Вы не может получить char *
из строки
строка
не позволяет вам получить свободный доступ к своему внутреннему буферу.
Ближайшее, что вы можете получить, это const char *
с использованием .c_str ()
, если вы хотите, чтобы он завершался нулем, или .data ()
, если он не должен завершаться нулем.
Затем вы можете преобразовать указатель, возвращаемый этими функциями, в char *
, но вы делаете это на свой страх и риск. При этом это относительно безопасное приведение при условии, что вы не меняете строку. Если вы его изменили, то указатель, полученный от c_str ()
, может стать недействительным.
Этот код:
string str("Hello World!");
char* sp = (char*)str.c_str();
sp[5] = 'K';
, вероятно, подходит
Однако этот:
string str("Hello World!");
char* sp = (char*)str.c_str();
str = "Chaged string";
sp[5] = 'K';
определенно не подходит.
Если str в вашей строке, используйте метод str.c_str ()
, чтобы поместить в нее символ *.