簡體   English   中英

如何將char *指針轉換為C ++字符串?

[英]How to convert a char* pointer into a C++ string?

我有一個C ++ string 我需要將此字符串傳遞給接受char*參數的函數(例如 - strchr() )。

a)我如何獲得指針?

b)是否有一些與strschr()等效的函數適用於C++ strings

  1. 要獲得C串等效的C++ string對象使用c_str功能。
  2. 要找到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的生命周期有效。

更多信息:
如何在c ++中為char * pw分配一個字符串

祝好運!!

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM