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

Tej*_*eja 12 c c++ string

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

pax*_*blo 26

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

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

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

在C++中,strings(std::string)是具有所有相关自动内存管理和控制的对象,这使得它们更安全,更易于使用,特别是对于新手而言.对于动态分配,请使用以下内容:

std::string s = "Hello";
s += ", Pax";
Run Code Online (Sandbox Code Playgroud)

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


小智 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;
}
Run Code Online (Sandbox Code Playgroud)

输出»¿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;
}
Run Code Online (Sandbox Code Playgroud)

输出男孩

我希望你明白了!

  • C 的这种行为是导致像 Heartbleed 这样的错误的原因。 (2认同)