#include <iostream>
#include <cstring>

int main() {
    // 初始化长度为20的字符数组
    char arr[20] = 'Hello, world!';
    std::cout << '初始数组内容:' << arr << std::endl;

    // 修改数组元素
    arr[5] = '!';
    arr[7] = 'o';
    // 使用'\0'表示字符串结束
    arr[12] = '\0';
    std::cout << '修改后的数组内容:' << arr << std::endl;

    // 计算数组占用的内存空间
    std::cout << '数组占内存空间的长度:' << sizeof(arr) << ' 字节' << std::endl;
    // 计算数组中有效字符的个数
    std::cout << '数组中有效字符的个数:' << strlen(arr) << ' 个字符' << std::endl;

    return 0;
}

代码解析

  • 首先,我们定义了一个长度为20的字符数组 arr,并使用字符串 'Hello, world!' 进行初始化。
  • 然后,我们修改了数组中的部分元素,将 arr[5] 修改为 '!',arr[7] 修改为 'o',arr[12] 修改为 '\0'。
    • 需要注意的是,'\0' 是字符串的结束标志,它表示字符串的有效内容到此为止。
  • 接着,我们使用 sizeof(arr) 计算数组占用的内存空间大小,使用 strlen(arr) 计算数组中有效字符的个数。

sizeof(arr) 和 strlen(arr) 的区别

  • sizeof(arr) 返回的是数组类型占用的总字节数,包括所有元素,无论是否被使用。
  • strlen(arr) 返回的是数组中有效字符的个数,即从数组起始位置到遇到第一个 '\0' 字符为止的字符数量。

结论

由于 sizeof(arr) 计算的是整个数组的内存空间,而 strlen(arr) 只计算有效字符的数量,因此通常情况下 sizeof(arr) 的值会大于等于 strlen(arr) 的值。

补充

  • 如果需要计算数组的元素个数,可以使用 sizeof(arr) / sizeof(arr[0]),其中 sizeof(arr) 表示数组的总字节数,sizeof(arr[0]) 表示数组中单个元素的字节数。
  • 在实际编程中,建议使用 strlen(arr) 来获取字符串的长度,因为它更加准确地反映了字符串中有效字符的数量。
C++字符数组操作:初始化、修改、长度计算及内存空间分析

原文地址: https://www.cveoy.top/t/topic/b6ba 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录