繁体   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