所以你可以使用char * ...
在c ++上做c样式字符串我的问题是,你可以做任何你可以用普通字符串做的事情吗?
所以假设你有
char * c;
你能做到:
c = "etcetc";
c = c + "dddddd";
等?
而且它与字符串几乎可以互换?
所以
char * c = "etcetc";
string s;
s = c;
那会有效吗?
答案 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";