sizeof和strlen本质区别

Posted on 2022-03-24 18:43  牛man  阅读(60)  评论(0)    收藏  举报

sizeof定义

 sizeof 运算符。表达式 sizeof(type) 得到某个类型或某个变量在特定平台上的准确存储大小,返回值unsigned int 类型

strlen定义

strlen是个函数,函数原型:size_t strlen(const char *str),用来计算字符串的实际长度(不包括‘\0'在内),函数的返回值size_t 为unsigned int 类型,

 例子:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define PI 3.14159265
const int b = 50000;
int main(void)
{
        char a[] = "hello world";
        int *c ="asfdgh";
        unsigned int d = sizeof(c);
        printf("%ld,%ld,%ld,%ld",sizeof(c),strlen(c),sizeof(a),strlen(a));

//sizeof 是用来计算某种类型在特定平台所占字节大小,也可以用来计算字符串长度
//strlen 是处理字符串的库函数,在string.h中声明,用来计算字符串的实际长度

return 0;
}
运行结果:
8 6 12 11
#include<stdio.h>
int main()
{
    // char ss[4][10];
    // char ss[4]="dddd";
    int i;
    int len ,len1;
    
char site[] = "RUNOO  B";
len  = sizeof(site);
len1 = strlen(site);
printf("len :%d,len1 :%d\n",len,len1);
printf("%s\n ",site);
for(i=0;i<sizeof(site);i++)
{
    printf("%p\n",(site+i));
}

}

运算结果:

len :9,len1 :8
RUNOO B
0x7ffcaac2c0cf
0x7ffcaac2c0d0
0x7ffcaac2c0d1
0x7ffcaac2c0d2
0x7ffcaac2c0d3
0x7ffcaac2c0d4
0x7ffcaac2c0d5
0x7ffcaac2c0d6
0x7ffcaac2c0d7

 

 

int * 在64位操作系统内存空间是8byte,所以sizeof(a)=8

总结:

字符串在计算机内存中存储时,编译器会自动添加一个‘/0'作为字符串结束符,在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。

sizeof 计算结果包括’\0'在内,而strlen 计算结果遇到‘/0'就结束,计算的结果不包括’/0';

空字符(Null character)又称结束符,缩写 NUL,是一个数值为 0 的控制字符,\0 是转义字符,意思是告诉编译器,这不是字符 0,而是空字符。您不需要把 null 字符放在字符串常量的末尾。C 编译器会在初始化数组时,自动把 \0 放在字符串的末尾。