sizeof:在c语言中是一个判断数据类型或者表达式长度的运算符。
strlen:首先它是一个函数(而且是库函数),它所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’)为止,然后返回计数器值(长度不包含’\0’)。
使用strlen函数时一定要引头文件#include<string.h>
#incldue<string.h>//引头文件
int main()
{
char ch[10];
int len = strlen(ch);//strlen函数求出来需要接收它返回的值
return 0;
}
下面看具体看代码实现吧,这样更有助于理解。
对比一 :求数据类型
sizeof:
printf("%d\n", sizeof(int));//4
printf("%d\n", sizeof(char));//1
printf("%d\n", sizeof(float));//4
printf("%d\n", sizeof(double));//8
printf("%d\n", sizeof(long));//4
printf("%d\n", sizeof(long long));//8
strlen:直接报错,说明它不可以求数据类型。**
对比二 求整数数组
sizeof:
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };//整数数组
printf("%d\n", sizeof(arr));//36
strlen: 不可以求整数数组
对比三 求字符串长度
sizeof:sizeof求字符串会把’\0’算作一个字符,不需要以’\0’结束。
char ch1[] = "abcdef";//这是字符串最后有默认的'\0'
char ch2[] = { 'a', 'b', 'c', 'd', '\0' };//这是字符数组,'\0'需要自己加
char ch3[] = { 'a', 'b', 'c', 'd' };//比如这个没有'\0' 输出数组大小就是随机值
printf("%d\n", sizeof(ch1));//7
printf("%d\n", sizeof(ch2));//5
printf("%d\n", sizeof(ch3));//4
strlen:strlen函数求字符串并不会把’\0’算作一个字符,只是判断结束的标志。
char ch1[] = "abcdef";//这是字符串数组,最后有默认的'\0'
char ch2[] = { 'a', 'b', 'c', 'd', '\0' };//这是字符数组,'\0'需要自己加
char ch3[] = { 'a', 'b', 'c', 'd' };//比如这个没有'\0' 输出数组大小就是随机值
printf("%d\n", strlen(ch1));//6
printf("%d\n", strlen(ch2));//5
printf("%d\n", strlen(ch3));//这的16只是随机值
对比了这么多,既然说了strlen是函数,那接下来看一下它的原型和它是怎么实现的
自己模拟strlen函数
size_t my_strlen(const char* str)
{
int count = 0;//计数器
while (*str != '\0')
{
count++;
str++;
}
return count;//返回计算得到的值
}