哦豁,看一下sizeof和strlen

本文探讨了`sizeof`和`strlen`的区别。`sizeof`返回的是无符号整型数,不受变量值影响,可用于类型和函数;而`strlen`只适用于`char*`且在运行时计算字符串长度,不包括结束符``。`sizeof`在编译时计算,`strlen`在运行时计算,数组作为参数时`sizeof`不会退化,`strlen`则会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里是引用

sizeof和strlen的区别


1.sizeof是操作符,strlen是库函数
2.sizeof的返回值是size_t,是无符号的,保证能容纳建立的最大对象的所占内存 字节大小

typedef unsigned int size_t
size_t是无符号的,并且与平台无关,表示0-MAXINT的范围
size_t是标准规定的一个同义词,它的定义放在stddef.h里面,不同的环境下,
可以是
typedef unsigned size_t;
也可以是
typedef unsigned long size_t;

下面程序的结果:

#include <stdio.h>
int i;
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0; 
}

结果: >
解析:sizeof返回的是无符号整形数,全局变量未初始化后默认值为0,i–后为-1,和无符号整形进行比较是,会进行整形提升为无符号数,此时-1是一个很大的数,所以输出>
3.sizeof可以用类型做参数,还可以用函数做参数,strlen只能用char*类型做参数,并且要以\0结尾

short func();
printf("%d\n", sizeof(func()));
//输出的结果是sizeof(short),2

4.数组做sizeof的参数不退化,做strlen的参数退化为指针
5.sizeof在编译阶段就进行长度计算了,(数组的大小在编译期间给出),strlen在运行时计算长度,计算的是字符串的长度,不是数组在内存中实际的占用大小

int a[3][4] = {0};
printf("%d\n",sizeof(a[3])); //16   a[3]不参与运算,sizeof只计算大小。数组大小时在预编译阶段确定。

6.sizeof计算字符串长度是包括\0在内的,strlen计算长度时不包括\0

char s[] = "Helloworld";
printf("strlen(%s) = %d\n", s, strlen(s));
printf("sizeof(%s) = %d\n", s, sizeof(s));

结果:
strlen(Helloworld) = 10
sizeof(Helloworld) = 11

7.sizeof会计算到字符串最后一个空字符\0并结束,而strlen如果遇到第一个空字符\0的话就会停止并计算遇到的第一个空字符\0前面的长度。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值