C字符串和C++字符串有什么区别,特别是在进行动态内存分配时?
我不知道从哪里开始 :-)
在C语言中,字符串只是以空字符结尾的char
数组。在动态内存管理方面,您可以简单地为它们分配空间(包括额外的字节)使用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++字符串更加安全、易于使用,并支持不同的字符串操作函数,例如附加、查找、复制、连接等。
在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·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;
}
输出 男孩
我希望你明白了要点!!
char *
或const char *
,它们只是以空字符结尾的字符数组。即使字符串字面值也只是字符数组。 - ad absurdum
char*
е’Ңchar[]
еӯ—з¬ҰдёІзҡ„еҢәеҲ«пјҢиҝҳжҳҜchar
еҹәзЎҖеӯ—з¬ҰдёІе’Ңstd::string
д№Ӣй—ҙзҡ„еҢәеҲ«пјҹ - dmckee --- ex-moderator kittenc_str
更容易实现。 - paxdiablo