c ++问题上的c样式字符串

时间:2011-05-02 04:11:11

标签: c++ string types char

所以你可以使用char * ...

在c ++上做c样式字符串

我的问题是,你可以做任何你可以用普通字符串做的事情吗?

所以假设你有

char * c;
你能做到:

c = "etcetc";
c = c + "dddddd";

等?

而且它与字符串几乎可以互换?

所以

char * c = "etcetc";
string s; 

s = c; 
那会有效吗?

5 个答案:

答案 0 :(得分:3)

C风格的字符串本质上是一个以NULL结尾的字符数组,而C ++中的std :: string是一个设计良好的面向对象的字符串类/对象。 在大多数情况下,它们不可互换,这取决于您执行的操作。您始终可以调用std::string::c_str()来获取内部C风格的字符串。

char * c

// OK because this makes c point to the starting address of "etcetc",
c = "etcetc";

// Compile-time error! You cannot add two pointers anyway because it's meaningless
c = c + "dddddd";

// OK, because string has constructor "string ( const char * s )"
string s1 = c;

string s2;
// OK, because string has "string& operator= ( const char* s )"
s2 = c;

值得一提的是:

// "etcetc" is a constant string here and you cannot modify it via pointer c
char * c = "etcetc";

// You can change string contents in two cases
char c[] = "etcetc";
string str = "etcetc";

答案 1 :(得分:1)

不,您无法使用char*+连接在一起;你必须使用strcat并手动分配缓冲区。这就是C ++中存在std::string类的原因。

char*string 的作业有效,因为string类明确支持它。

答案 2 :(得分:1)

绝对不是,不。

(char *)严格来说是指向内存位置的指针。字符串连接需要一个带有源字符串副本的新缓冲区(有关一种方法,请参阅libC文档中的strcat)。

答案 3 :(得分:0)

char*是指向char的(地址)的指针。当您说c = c + "xxx"时,您将一个字符串的地址添加到另一个字符串。这几乎肯定不是你想要的。

您需要使用支持串联的字符串类来使用您提供的语法。否则,您可以调用旧式字符串函数,如strcat()

答案 4 :(得分:0)

我最近在Ada和C中使用了多年后切换到C ++。我发现我从不使用C风格的字符串,除了将它们转换为字符串(如果我别无选择,可能会再次使用)。这样做,一大堆常见的C问题就消失了。

即。为什么char * x="dadada";何时 代码后面的string x="dadada";会更容易吗?

这是有效的代码,并且完全符合您的期望,因为c是字符串,而不是char *。

string c ; 

.......

c = "etcetc";
c = c + "dddddd";