如何将char *指针转换为C ++字符串?

时间:2010-04-25 11:16:35

标签: c++ string pointers strchr

我有一个C ++ string。我需要将此字符串传递给接受char*参数的函数(例如 - strchr())。

a)我如何获得指针?

b)是否有一些等同于strschr()的函数适用于C++ strings

8 个答案:

答案 0 :(得分:20)

  1. 获取等效的C字符串 C++ string对象使用c_str 功能。
  2. 找到第一个出现的 char对象中的string使用 find_first_of功能。
  3. 示例:

    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*的函数示例。

答案 1 :(得分:6)

令人惊讶的是,std :;字符串比C风格的字符串具有更多的功能。您可能需要find_first_of()方法。一般来说,如果你发现自己在C ++ std :: strings上使用strxxx()函数,你几乎肯定会做错事。

与C ++标准库的大部分内容一样,字符串类是一个复杂的野兽。为了充分利用它,你真的需要一本好的参考书。我推荐Nicolai Josuttis的The C++ Standard Library

答案 2 :(得分:4)

您无法从char*

获得string

string不允许您免费访问其内部缓冲区。 如果您希望空值终止,则可以使用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';

绝对不行。

答案 3 :(得分:0)

如果字符串中的str使用str.c_str()方法来获取其中的char *。

答案 4 :(得分:0)

如果您只想为pw分配字符串文字,可以像

那样进行
char *pw = "Hello world";

如果你有一个 C ++ std :: string object ,你想要分配给 pw 的值,你可以这样做

char *pw = some_string.c_str()

但是,pw指向的值仅对some_string的生命周期有效。

  

更多信息:
  How to assign a string to char *pw in c++

古德纳克!!

答案 5 :(得分:0)

std::string yourString("just an example");
char* charPtr = new char[yourString.size()+1];
strcpy(charPtr, yourString.c_str());

答案 6 :(得分:0)

也许这个例子会帮助你

#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;
}

答案 7 :(得分:0)

C ++标准提供了claass std :: basic_string的两个成员函数,它们返回指向字符串第一个元素的指针。它们是c_str()data()。但是两者都返回const char *,所以你可能不会将它们用于具有char *类型参数的函数。

对于函数strchr,它的第一个参数是const char *。因此,您可以将c_str()和data()与此函数一起使用。但是,使用类sttd :: basic_string的成员函数find()而不是strchr.

会好得多