一、sizeof和strlen的对比
①.sizeof
==a.sizeof是操作符,不是函数。==它计算的是某种类型所占空间的大小,单位是字节。sizeof的返回类型是无符号整型,最好用%zd打印它的返回值。
b.sizeof只关心某种类型所占内存空间的大小,不关心内存里面放的是什么。
②.strlen
a. strlen的原型
size_t strlen ( const char * str );
字符指针str接收的是字符串或者字符数组中首字符的地址。strlen会从首字符的地址开始,向后逐个字节的访问,直到访问到’\0’就停下来。最后返回’\0’之前的字符个数
b.strlen是库函数,使用前要包含头文件string.h。它计算的是字符串或字符数组中’\0’之前的字符个数。strlen 函数关注内存中的’\0’,会⼀直向后找 \0 字符,直到找到为⽌,所以可能存在越界查找。
#include<stdio.h>
#include <string.h>
int main()
{
char arr1[3] = { 'a', 'b', 'c' };
char arr2[] = "abc";
printf("%zd\n", strlen(arr1));
printf("%zd\n", strlen(arr2));
printf("%zd\n", sizeof(arr1));
printf("%zd\n", sizeof(arr2));
return 0;
}
③关于sizeof与strlen的两道笔试题
第一道
#include<stdio.h>
int main()
{
int a[] = { 1,2,3,4 };
printf("%zd\n", sizeof(a));
printf("%zd\n", sizeof(a + 0));
printf("%zd\n", sizeof(*a));
printf("%zd\n", sizeof(a + 1));
printf("%zd\n", sizeof(a[1]));
printf("%zd\n", sizeof(&a));
printf("%zd\n", sizeof(*&a));
printf("%zd\n", sizeof(&a + 1));
printf("%zd\n", sizeof(&a[0]));
printf("%zd\n", sizeof(&a[0] + 1));
return 0;