2010-08-11 212 views
10

C字符串和C++字符串有什么区别?特别而做动态内存分配C字符串和C++字符串有什么区别?

+0

你是指在两种语言中使用'char *'和'char []'字符串或基于'char'的字符串和'std :: string'之间的区别? – dmckee 2010-08-11 02:43:19

+1

请定义“C string”和“C++ string”的含义。两者(特别是后者)都不明确。 – strager 2010-08-11 02:43:36

+0

阅读http://www.cplusplus.com/reference/string/string/和http://www.macdonald.egate.net/CompSci/hstrings.html – 2010-08-11 02:44:36

回答

22

我几乎不知道从哪里开始:-)

在C中,字符串只是char阵列其中,按照惯例,年底用NULL字节。在动态内存管理方面,你可以简单地为它们提供空间(包括额外的字节)。修改字符串时内存管理是责任:

char *s = strdup ("Hello"); 
char *s2 = malloc (strlen (s) + 6); 
strcpy (s2, s); 
strcat (s2, ", Pax"); 
free (s); 
s = s2; 

在C++中,字符串(std::string)与所有相关的自动化存储管理和控制,这使得他们很多更安全和更容易使用的对象,尤其是对新手。对于动态分配,使用类似:

std::string s = "Hello"; 
s += ", Pax"; 

我知道我倒是喜欢使用,后者。您可以(如果您需要)始终使用c_str()方法从std::string中构建一个C字符串。

+2

'std :: string'是对象... – dmckee 2010-08-11 02:56:51

+0

该死的你c_str()! – 2010-08-11 06:11:06

6

C++字符串是更安全,更方便,并且支持不同的字符串操作的功能,如追加,发现,复制,级联等

C字符串和c串之间++一个有趣的差异是通过下面的示例

所示
#include <iostream>        
using namespace std; 

int main() { 
    char a[6]; //c string 
    a[5]='y'; 
    a[3]='o'; 
    a[2]='b'; 
    cout<<a; 
    return 0; 
} 

输出»¿boRy¤£·F·裨»¿

#include <iostream> 
using namespace std; 
int main() 
{ 
    string a; //c++ string 
    a.resize(6); 
    a[5]='y'; 
    a[3]='o'; 
    a[2]='b'; 
    cout<<a; 
    return 0; 
} 

输出男孩

我希望你明白了!

+0

这种来自C的行为是造成Heartbleed等错误的原因。 – saolof 2017-02-12 09:57:40

相关问题