char str[]和string str有什么区别?

  1. char str[]是一个字符数组,也称为C风格字符串。它是一个固定大小的字符数组,用于存储一串以空字符('\0')结尾的字符序列。例如,char str[] = "Hello";声明了一个包含5个字符的字符数组。

  2. string str是C++中的字符串类,它是通过<string>头文件提供的标准库来定义的。string类提供了许多方便的成员函数和操作符,用于字符串的操作和处理。例如,string str = "Hello";声明了一个字符串对象,其中包含字符串"Hello"。

区别如下:

  • 存储方式:char str[]使用字符数组存储字符串,每个字符占用一个字节的内存空间。而string str使用动态内存分配的方式存储字符串,可以根据需要自动调整存储空间的大小。

  • 操作和功能:char str[]是一个较低级别的字符串表示形式,需要使用C风格的字符串函数进行操作,如strcpystrcmp等。而string str是一个高级的字符串类,提供了丰富的成员函数,例如length()substr()find()等,使字符串的操作更加方便和灵活。

  • 安全性:由于char str[]是一个固定大小的字符数组,如果字符串的长度超过了数组的大小,可能会导致缓冲区溢出的问题。而string str会自动调整存储空间的大小,避免了缓冲区溢出的风险。

总的来说,string类提供了更高级、更安全和更方便的字符串操作方式,而char数组则更接近底层的字符串表示形式。在C++中,推荐使用string类来处理字符串,除非有特殊的需求需要使用char数组。

一、length()函数
C++中length()函数只能用来获取字符串长度。

string str = "ADAS";
int len = str.length();

其中len = 4

二、size()函数
C++中size()函数除了跟length()函数一样可以获取字符串长度之外,还可以获取vector类型的长度。

string str = "ADAS";
vector < int> num(10,5)

int lenstr = str.size();
int lenvec = num.size();


其中lenstr = 4; lenvec = 10

三、sizeof()函数


sizeof() 用于获取对象所占内存空间大小

char c[] = "ADAS";
char* cc = c;
char cn[40] = "ADAS";
int a[] = {1,2,3,4,5,6};
int* aa = a;
cout << sizeof(c) << sizeof(cc) << sizeof(cc) << sizeof(cn);
cout << sizeof(a) << sizeof(aa) << sizeof(aa);

结果输出:

sizeof(c) = 5 //c是数组,计算到'\0'位置,结果为4 * 1+1=7
sizeof(cc) = 8 //cc为指针类型,大小为8
sizeof(*cc) = 1 //*cc指向c的第一个字符,大小为1
sizeof(cn) = 40 //开辟40个char空间,大小为40 * 1=40
sizeof(a) = 24 //a是数组,但不需计算到'\0',结果为6 * 4=24
sizeof(aa) = 8 //aa为指针类型,大小为8
sizeof(*aa) = 4 //*aa指向a的第一个数字,大小为4
 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C++ 中,`c_str()` 和 `str()` 是 `std::string` 类的两个成员函数,用于获取 `std::string` 对象中存储的字符串。 1. `c_str()`: `c_str()` 函数返回一个指向以 null 结尾的 C 风格字符串的指针(`const char*` 类型)。该函数主要用于与 C 语言的函数进行交互,或者需要将 `std::string` 转换为 C 风格字符串的情况。返回的指针指向 `std::string` 对象内部存储的字符数组,并以 null 终止。注意,使用 `c_str()` 函数获取的指针是只读的,不能修改字符串内容。 2. `str()`: `str()` 函数返回一个 `std::string` 对象的副本。该函数将 `std::string` 对象中的字符串内容复制到新的 `std::string` 对象中,并返回这个新的对象。使用 `str()` 函数可以方便地获取 `std::string` 对象的拷贝,对返回的对象进行修改不会影响原始的 `std::string` 对象。 以下是一个示例代码,展示了 `c_str()` 和 `str()` 的用法: ```cpp #include <iostream> #include <string> int main() { std::string myString = "Hello, World!"; // 使用 c_str() 函数获取 C 风格字符串并打印 const char* cString = myString.c_str(); std::cout << "C-style string: " << cString << std::endl; // 使用 str() 函数获取 std::string 对象的副本并打印 std::string copyString = myString.str(); std::cout << "Copy of string: " << copyString << std::endl; return 0; } ``` 在上述示例中,我们创建了一个名为 `myString` 的 `std::string` 对象,并将其初始化为 "Hello, World!"。然后,我们使用 `c_str()` 函数获取到 `myString` 的 C 风格字符串,并将其打印输出。接着,我们使用 `str()` 函数获取 `myString` 的副本,并将副本存储在 `copyString` 变量中,然后将其打印输出。 希望对你有所帮助!如有其他问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值