C字符串和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 )是所有相关的自动内存管理和控制的对象
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;
}