[英]How to convert a char* pointer into a C++ string?
我有一个C ++ string
。 我需要将此字符串传递给接受char*
参数的函数(例如 - strchr()
)。
a)我如何获得指针?
b)是否有一些与strschr()
等效的函数适用于C++ strings
?
C
串等效的C++
string
对象使用c_str
功能。 string
对象中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 :;字符串比C风格的字符串具有更多的功能。 您可能需要find_first_of()方法。 通常,如果您发现自己在C ++ std :: strings上使用strxxx()函数,那么您几乎肯定会做错事。
像许多C ++标准库一样,字符串类是一个复杂的野兽。 为了充分利用它,你真的需要一本好的参考书。 我推荐Nicolai Josuttis撰写的C ++标准库 。
你不能从string
获取char*
string
不允许您自由访问其内部缓冲区。 你可以得到的最接近的是使用.c_str()
的const char*
如果你希望它是null终止的话,或者.data()
如果它不必以null终止。
然后,您可以将这些函数返回的指针强制转换为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';
绝对不是好的。
C ++标准提供了claass std :: basic_string的两个成员函数,它们返回指向字符串第一个元素的指针。 它们是c_str()
和data()
。 但是两者都返回const char *,所以你可能不会将它们与具有char *类型参数的函数一起使用。
至于函数strchr,那么它的第一个参数是const char *
。 因此,您可以将c_str()和data()与此函数一起使用。 但是,使用类strchr.
:: basic_string的成员函数find()
而不是strchr.
如果字符串中的str使用str.c_str()
方法来获取其中的char *。
如果你只想为pw分配一个字符串文字,你可以这样做
char *pw = "Hello world";
如果你有一个C ++ std :: string对象 ,你想要分配给pw的值 ,你可以这样做
char *pw = some_string.c_str()
但是,pw指向的值仅对some_string的生命周期有效。
祝好运!!
std::string yourString("just an example");
char* charPtr = new char[yourString.size()+1];
strcpy(charPtr, yourString.c_str());
也许这个例子会帮助你
#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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.