C字符串和C++;串? < C字符串和C++字符串之间的区别是什么?特别是在进行动态内存分配时,我几乎不知道从哪里开始:-)

C字符串和C++;串? < C字符串和C++字符串之间的区别是什么?特别是在进行动态内存分配时,我几乎不知道从哪里开始:-),c++,c,string,C++,C,String,在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 )是所有相关的自动内存管理和控制的对象

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

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

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

<> P>字符串与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;
}
#包括
使用名称空间std;
int main(){
char a[6];//c字符串
a[5]=“是”;
a[3]='o';
a[2]=“b”;

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


最后,std::string与char*具有的“gotcha!”时刻不同:

您是指在两种语言中使用
char*
char[]
字符串之间的区别,还是基于
char
的字符串和
std::string
之间的区别?请定义“C string”和“C++string”的含义.两者(尤其是后者)这是一个模糊的问题。我无法想出他们可能有共同点的东西。我必须睡在上面。“咕噜,这可能是一个实现问题。我认为标准中没有任何东西可以说C++字符串是不允许空的。实际上,它可能使<代码> CySTR 更容易实现。我想它们一般是NU。l terminated,在调用c_str()时创建临时缓冲区时节省。c的这种行为会导致诸如Heartbleed之类的错误。c字符串不是
char*
const char*
;它们只是以null结尾的字符数组。甚至字符串文字也只是字符数组。
#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;
}