什么是C字符串和C ++字符串之间的区别?

时间:2010-08-11 02:41:57

标签: c++ c string

C Strings和C ++字符串之间的区别。特别是在进行动态内存分配时

3 个答案:

答案 0 :(得分:25)

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

在C中,字符串只是char个数组,按照惯例,它们以NUL字节结尾。在动态内存管理方面,您可以简单malloc为它们提供空间(包括额外字节)。修改字符串时的内存管理是您的责任:

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";

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

答案 1 :(得分:8)

C ++字符串更安全,更容易,并且它们支持不同的字符串操作函数,如追加,查找,复制,连接等。

c string和c ++ string之间的一个有趣区别通过以下示例说明

#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·Pi»¿

#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;
}

输出男孩

我希望你明白这一点!!

答案 2 :(得分:1)

区别在于某些操作的速度以及发生常见错误的位置的封装。 std :: string维护有关字符串内容和长度的信息。这意味着它不像const char *一样容易发生缓冲区溢出。对于大多数操作来说,它也比const char *更快,因为字符串的长度是已知的。 大多数cstring操作在幕后调用strlen()来查找字符串的长度,然后再对其进行操作,这会降低性能。 std :: string与STL算法和其他容器兼容。

最后,std :: string没有相同的“陷阱!”字符*的瞬间将具有: