首页 > 其他分享 >字符数组VS字符串(一文搞懂有什么区别)

字符数组VS字符串(一文搞懂有什么区别)

时间:2024-06-06 20:04:32浏览次数:24  
标签:std string C++ VS 内存 字符串 搞懂 Hello

当你在C++的程序中,经常会遇到两种字符串的表达方法,一种是以字符数组的方式,还有用string的,这二者到底有什么不同?下文将会帮彻底弄懂。

因为许多函数参数当需要传入字符串的时候,有的代码中使用指向字符数组的指针来传递字符串,其实C++中传入字符数组,就相当于传入一个指向该数组的指针。具体原因将会在我的其他博客里面介绍,因此搞懂字符数组和C++中的string是很有必要的。

C语言中的字符串和C++中的字符串在本质上有很大的不同。

一、C语言中的字符串

  1. 表示方式:
    *C语言中的字符串是用字符数组表示的,并以空字符(‘\0’)结尾来标识字符串的结束。
  2. 定义和初始化:
char str1[] = "Hello, C!";
char str2[20] = "Hello, C!";
char str3[20];
strcpy(str3, "Hello, C!");
  1. 字符串操作
    C语言中,操作字符串需要使用标准库中的函数,如strlen、strcpy、strcat、strcmp等。
#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello";
    char str2[] = ", World!";
    strcat(str1, str2); // 拼接字符串
    printf("%s\n", str1); // 输出:Hello, World!
    
    int len = strlen(str1); // 计算字符串长度
    printf("Length: %d\n", len); // 输出:12
    
    return 0;
}
  1. 内存管理
    需要手动管理内存。若使用动态分配,需自己负责释放内存,防止内存泄漏。
char *str = (char *)malloc(20 * sizeof(char));
strcpy(str, "Hello, C!");
// 使用完后要释放内存
free(str);

二、C++中的字符串

  1. 表示方式:
    C++中引入了std::string类,提供了更高层次的字符串操作。
  2. 定义和初始化:
#include <iostream>
#include <string>

int main() {
    std::string cppStr1 = "Hello, C++!";
    std::string cppStr2("Hello, C++!");
    std::string cppStr3;
    cppStr3 = "Hello, C++!";
    
    std::cout << cppStr1 << std::endl;
    return 0;
}
  1. 字符串操作:
    std::string类提供了丰富的成员函数,简化了字符串操作,如length、substr、find、replace等。
#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello";
    std::string str2 = ", World!";
    str1 += str2; // 拼接字符串
    std::cout << str1 << std::endl; // 输出:Hello, World!
    
    size_t len = str1.length(); // 计算字符串长度
    std::cout << "Length: " << len << std::endl; // 输出:12
    
    std::string subStr = str1.substr(0, 5); // 获取子串
    std::cout << "Substring: " << subStr << std::endl; // 输出:Hello
    
    return 0;
}
  1. 内存管理:
    std::string类自动管理内存,无需手动释放,防止了内存泄漏的问题。
  2. 功能和安全性:
    std::string类具有异常处理机制,当操作越界或内存不足时,可以抛出异常,增强了代码的健壮性。更加方便和安全,减少了手动管理内存的错误风险。

三、总结

特性C语言C++
表示方式字符数组string类
结束符空字符’\0’不需要空字符
内存管理手动管理自动管理
操作函数标准库函数(如strcpy等)成员函数(如length等)
安全性容易出错更加安全

标签:std,string,C++,VS,内存,字符串,搞懂,Hello
From: https://blog.csdn.net/weixin_46089415/article/details/139508318

相关文章

  • 【VMware vSphere】安装配置Update Manager Download Service(UMDS)作为 vLCM 的下载存
    VMwarevSphereUpdateManagerDownloadService(UMDS)是vSphereLifecycleManager(vLCM)的可选模块。我在之前文章中提到这个功能,当vSphere环境能够连接Internet时,我们可以使用vLCM的在线Internet下载源获取修补程序,当vSphere环境不能连接Internet时,您可以在您的......
  • try-catch VS try-catch-finally
    try-catch和try-catch-finally是Java中用于异常处理的两种基本结构,它们的主要区别在于资源管理和流程控制上。try-catch功能:主要用于捕获并处理代码块中可能发生的异常。当try块中的代码执行时遇到异常,对应的catch块将被执行,处理异常。特点:如果try块没有抛出任何异常,......
  • 文心一言 VS 讯飞星火 VS chatgpt (275)-- 算法导论20.3 2题
    二、修改vEB树以支持带有卫星数据的关键字。如果要写代码,请用go语言。文心一言:vEB树(vanEmdeBoas树)是一种用于处理稀疏位集合的高效数据结构,它允许在常数时间内执行查找、插入、删除和前驱/后继操作。然而,标准的vEB树并不直接支持带有卫星数据的关键字。要支持带有......
  • SAN vs. NAS
    https://blog.51cto.com/xslwahaha/1617781SAN与NAS是完全不同架构的存储方案,前者支持Block协议,后者则支持File协议;SAN结构中,文件管理系统(FS)还是分别在每一个应用服务器上,会产生I/O操作,而NAS则是每个应用服务器通过网络共享协议(如:NFS、CIFS)使用同一个文件管理系统,所以CPU密集型......
  • String、StringBuilder和StringBuffer是处理字符串的三个不同的类
    在Java中,String、StringBuilder和StringBuffer是处理字符串的三个不同的类,它们各自具有不同的特点和使用场景。下面将具体分析这三个类的异同点:不可变性与可变性String:String是一个不可变的字符串,这意味着一旦一个String对象被创建,其值就不能改变。这种设计提供了值的恒定性,使......
  • C语言—字符函数和字符串函数
    1.字符分类函数C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个头文件ctype.h。例:将一句话中的小写字母改成大写字母。2.字符转换函数头文件:ctype.hC语言提供了2个字符转换函数:int tolower(intc);//将......
  • C语言 | 字符串函数(第二篇)【全网最详细,通俗易懂,必收藏】
    字符串函数(第二篇)一、strncpy1、strncpy的使用2、strncpy的模拟实现二、strncat1、strncat的使用2、strncat的模拟实现三、strncmp1、strncmp的使用2、strncmp的模拟实现四、strstr1、strstr的使用2、strstr的模拟实现一、strncpy1、strncpy的使用char*strnc......
  • VMware vSphere 8.0 Update 3 下载 - 企业级工作负载平台
    VMwarevSphere8.0Update3下载-企业级工作负载平台ESXi8.0U3&vCenterServer8.0U3请访问原文链接:https://sysin.org/blog/vmware-vsphere-8-u3/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org企业工作负载引擎vSphere获得企业工作负载引擎的强大功能。......
  • VScode右键打开(添加到右键)
    原文链接:https://blog.csdn.net/2301_79279082/article/details/132734873打开注册表:win+R->regedit共需要在三处添加:第一处:1、HKEY_CLASSES_ROOT->*->shell->OpenWithVS(自定义,用户新建)  1.0 右键shell-》新建项-》重命名为OpenWithVS......
  • 2024年6月 AWVS -24.4.27详细安装教程附下载教程含windows和linux多版本
    免责声明请勿利用文章内的相关技术从事非法测试。由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,请务必遵守网络安全法律法规。本文仅用于测试,请完成测试后24小时删除,请勿用于商业用途。如文中内容涉及侵权......