我们都知道sizeof计算的是数组的所有的大小,而strlen计算的是字符串的有效的大小,不能用sizeof来计算字符串的有效长度,切记sizeof是C语言里的一个关键字而不是函数,用strlen来计算字符串的大小的时候,它会一直往字符串下去跑,直到遇到‘\0’后结束计算,记得用strlen来算时’\0’是没有算进字符串的大小里的。
接下来直接用代码来体现一波;
1.首先举个例子先
例char data[20] = "hello”;
此时用sizeof来计算的话会算出的是20个字节的大小,而用strlen来算的话算出的是5个字节大小。
即sizeof(data)= 20;strlen(data)= 5;
还有一种char data[] = “hello”;
此时用sizeof(data)= 6;而strlen(data)= 5;
因为字符串hellol里隐含着一个’\0’,所以会算出6个字节的大小,而strlen依然是有效长度的大小
特别提醒,字符型指针指向字符串的机制。
char *pdata = “hello”;
字符型指针是保存字符串的首地址,而不是保存字符串的内容
例如上面pdata保存的是h的地址,而后面e以后的是指向他们
上代码:
#include <stdio.h>
#include <string.h>
int main()
{
//比较sizeof与strlen的区别
//知道strlen计算的是数组的有效长度,即计算出的是hello这五个字节
//而sizeof求的是整个数组的大小,即求出的是128个字节
char cdata[128] = "hello";
char cdata1[] = "hello";
//cdata1这个用sizeof求出的大小是6,因为字符串是隐含着'\0'结束的,加上\0就是6个
//字符型指针是保存字符串的首地址,而不是保存字符串的内容
//例如下面pdata保存的是h的地址,而后面e以后的是指向他们
char *pdata = "hello";
printf("sizeof: %d\n",sizeof(cdata1));
printf("sizeof:%d\n",sizeof(cdata));
printf("strlen: %d\n",strlen(cdata));
printf("sizeof: %d\n",sizeof(pdata));
printf("strlen: %d\n",strlen(pdata));
printf("sizeof: %d\n",sizeof(char));
return 0;
}
输出结果
再次强调一下,指针的大小要不是8个字节就是4个字节,4个或8个是要根据编译器的位数来决定的,32位编译器是4个字节,而64位编译器是8个字节。