这样你就可以在c执行空调风格字符串++使用char * ...空调风格字符串++问题
我的问题是,你能几乎做任何事情,你可以在正常的字符串,这样做报关..
所以假设你有
char * c;
你可以这样做:
c = "etcetc";
c = c + "dddddd";
等?
而且它与字符串几乎可以互换吗?
所以
char * c = "etcetc";
string s;
s = c;
那会是有效的?
这样你就可以在c执行空调风格字符串++使用char * ...空调风格字符串++问题
我的问题是,你能几乎做任何事情,你可以在正常的字符串,这样做报关..
所以假设你有
char * c;
你可以这样做:
c = "etcetc";
c = c + "dddddd";
等?
而且它与字符串几乎可以互换吗?
所以
char * c = "etcetc";
string s;
s = c;
那会是有效的?
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";
不,你不能连接使用+
连接char*
;您必须使用strcat
和手动分配的缓冲区。这就是为什么std::string
类以C++存在的原因。
从char*
到string
分配是有效的,因为string
类明确支持它。
绝对没有,没有。
(char *)是严格指向内存位置的指针。字符串连接需要一个带有源字符串副本的新缓冲区(有关一种方法,请参阅libC文档中的strcat)。
char*
是指向(地址)char
的地址。当你说c = c + "xxx"
时,你将一个字符串的地址添加到另一个字符串中。这几乎肯定不是你想要的。
您将需要使用支持连接的字符串类来使用您呈现的语法。否则,您可以调用旧式字符串函数,如strcat()
。
我最近在Ada和C多年后切换到C++。我发现我从来不使用C风格的字符串,只是将它们转换为字符串(如果我没有选择,可能会再回来)。那样做了,一大堆常见的C问题就消失了。
即为什么char * x="dadada";
当 string x="dadada";
后来在代码中更容易?
这是有效的代码,完全符合你的期望,因为c是一个字符串,而不是char *。
string c ;
.......
c = "etcetc";
c = c + "dddddd";
* “您要添加一个字符串的地址到另一个” * - 真的吗?我以为这不会编译(不能说我曾经尝试过..) – 2011-05-02 04:40:01
我也没有尝试它,但它应该编译。两个表达式都会产生一个'char *',并且C++肯定支持指针加/减。 – 2011-05-02 04:41:18
您可以将整数添加到指针,但不能添加两个指针。请参阅http://stackoverflow.com/questions/2935038/2935044#2935044 – 2011-05-02 16:09:41