sizeof以字节形式给出了其操作数的存储大小
short char的大小为1字节sizeof(char)的输出值为1
int 的大小为4字节sizeof(int)的输出值为4
对于char大小都为1字节的变量 易混淆sizeof和stlen
未指定数组大小时,如:char arr1[ ]
补\0的情况
1.未指定数组大小时char arr1[ ]="abcd";以双引号内的字符串会在最后加\0
2.指定数组大小时char arr2[5] = "abc";未补满的将用\0补满
3指定数组大小时char arr5[5] = { 'a','b','c'};未补满的将用\0补满
不补\0的情况
1.char arr4[ ]={'a','b','c'};大括号内的字符则不会在最后补\0
2数组已满也不补\0
对于char大小都为1字节的变量 易混淆sizeof和stlen
sizeof(arr)会统计变量元素的大小(元素包括\0)
strlen统计字符长度(不包括\0)
并且srtlen在遇到\0会停止检索字符
如果字符串中没有\0,且不补\0,则会返回随机值
#include<stdio.h>
#include<string.h>
//字符数组中sizeof与strlen的区别
int main()
{//[]中有数字,不满元素的用\0补满
//[]没数字的,"xxx"中在最后补\0;{'x','x'}不补\0
char arr1[] = "abcd";//有\0
char arr2[5] = "abc";//有\0\0
char arr3[5] = "abcde";//无\0
char arr4[] = { 'a','b','c' };//无\0
char arr5[5] = { 'a','b','c'};//有\0\0
char arr6[5] = { 'a','b','c','d','e'};//无\0
printf("%zd\n", sizeof(arr1));//5 //后面为输出值(下同)
printf("%zd\n", sizeof(arr2));//5
printf("%zd\n", sizeof(arr3));//5
printf("%zd\n", sizeof(arr4));//3
printf("%zd\n", sizeof(arr5));//5
printf("%zd\n", sizeof(arr6));//5
printf("%d\n", strlen(arr1));//4
printf("%d\n", strlen(arr2));//3
printf("%d\n", strlen(arr3));//随机
printf("%d\n", strlen(arr4));//随机
printf("%d\n", strlen(arr5));//3
printf("%d\n", strlen(arr6));//随机
return 0;
}