[英]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.