插件窝 干货文章 如何进行sizeof和strlen解析

如何进行sizeof和strlen解析

字符串 sizeof strlen 指针 994    来源:    2025-04-21

sizeof和strlen解析

sizeof和strlen是C/C++中常用的两个操作符/函数,但它们的功能和用法有本质区别。

sizeof操作符

功能:计算数据类型或变量所占内存的字节数

特点: - 是编译时操作符,在编译时就确定结果 - 可以用于任何数据类型(基本类型、数组、结构体、类等) - 对于数组名,返回整个数组的大小 - 对于指针,返回指针本身的大小(通常是4或8字节)

用法示例

int a;
printf("%zu\n", sizeof(a));      // 输出int的大小(通常4)
printf("%zu\n", sizeof(int));    // 同上

double arr[10];
printf("%zu\n", sizeof(arr));    // 输出10*8=80(假设double为8字节)

char *str = "hello";
printf("%zu\n", sizeof(str));    // 输出指针大小(通常4或8)

strlen函数

功能:计算以null结尾的字符串的长度(不包括null终止符)

特点: - 是运行时函数 - 只能用于以'\0'结尾的字符串 - 对于指针,返回字符串的实际长度 - 对于数组,如果包含null终止符,返回字符串长度

用法示例

char str1[] = "hello";
printf("%zu\n", strlen(str1));   // 输出5

char *str2 = "world";
printf("%zu\n", strlen(str2));   // 输出5

char arr[10] = {'a', 'b', 'c'};
printf("%zu\n", strlen(arr));    // 未定义行为,因为没有null终止符

主要区别

特性 sizeof strlen
类型 操作符 函数
计算时机 编译时 运行时
参数 类型或变量 必须以'\0'结尾的字符串
包含'\0' 包含 不包含
指针处理 返回指针大小 返回字符串长度
数组处理 返回整个数组大小 返回字符串长度

常见误区

  1. 混淆sizeof和strlen

    char str[] = "hello";
    printf("%zu %zu\n", sizeof(str), strlen(str)); // 输出6和5
    
  2. 对指针使用sizeof期望得到字符串长度

    char *p = "example";
    printf("%zu\n", sizeof(p)); // 输出指针大小,不是字符串长度
    
  3. 未初始化的字符串使用strlen

    char str[10];
    printf("%zu\n", strlen(str)); // 未定义行为
    

理解sizeof和strlen的区别对于正确管理内存和字符串操作至关重要。