跳到主要内容

解释C++ sizeof 和 strlen 的区别?

参考答案:

sizeofstrlen是C++中常用的两个运算符/函数,它们都用于测量某种类型或对象的大小,但它们的用途和上下文有所不同。

  1. sizeof

    • sizeof是一个运算符,不是函数。
    • 它用于确定数据类型或对象在内存中占用的字节数。
    • sizeof在编译时确定大小,因此它返回的是类型或对象的大小,而不是实际分配的内存量。
    • sizeof可以用于任何数据类型,包括基本数据类型(如int, float, char等)、结构体、类、数组等。
    • 对于数组,sizeof返回整个数组的大小(以字节为单位),而不仅仅是数组的第一个元素的大小。
    • sizeof不会考虑动态分配的内存大小。例如,如果你有一个指向动态分配的数组的指针,sizeof这个指针只会返回指针本身的大小,而不是数组的大小。
  2. strlen

    • strlen是一个函数,定义在cstringstring.h头文件中。
    • 它用于确定C风格的字符串(即以空字符'\0'结尾的字符数组)的长度,不包括终止的空字符。
    • strlen在运行时确定字符串的长度,因为它需要遍历字符串直到遇到空字符。
    • strlen只能用于C风格的字符串,不能用于其他类型的数据。
    • 如果尝试对未初始化的字符串或未以空字符结尾的字符数组使用strlen,可能会导致未定义的行为。

示例

#include <iostream>
#include <cstring>

int main() {
    char str[] = "Hello, World!";
    int arr[10];

    std::cout << "Size of str (C-style string): " << strlen(str) << " bytes\n";
    std::cout << "Size of arr (integer array): " << sizeof(arr) << " bytes\n";
    std::cout << "Size of int: " << sizeof(int) << " bytes\n";

    return 0;
}

在这个示例中,strlen(str)会返回13,因为字符串"Hello, World!"有13个字符(不包括结尾的空字符)。sizeof(arr)会返回40(假设int的大小为4字节),因为数组有10个int元素。sizeof(int)会返回int类型在特定平台/编译器上的大小,通常是4字节。