sizeof的功能是计算一个数据类型的大小,这个类型可以是数组、函数、指针、对象等,单位为字节,它的返回值是size_t类型,也就是unsigned int类型,是一个无符号整数。注意:sizeof不是一个函数,它是一个运算符,所以它不需要包含任何头文件。
strlen的功能是计算一个指定字符串的长度,函数原型是size_t strlen(const char *s),它的返回值是size_t类型,也就是unsigned int类型,返回的是字符串的长度,需要包含头文件#inlude <string.h>,参数s是字符串首地址。
区别:1、sizeof会将空字符\0计算在内,而strlen不会将空字符\0计算在内;
2、sizeof会计算到字符串最后一个空字符\0并结束,而strlen如果遇到第一个空字符\0的话就会停止并计算遇到的第一个 空字符\0前面的长度。
举例:
int main(void)
{
char str[100] = "abcde";
printf("sizeof(str) = %lu\n", sizeof(str)); //字节大小为100
char str1[] = "abcde";
printf("sizeof(str1) = %lu\n", sizeof(str1)); //字节大小为6
char str2[] = "\0abcde";
printf("sizeof(str2) = %lu\n", sizeof(str2)); //字节大小为7
char str3[] = "\0ab\0c de";
printf("sizeof(str3) = %lu\n", sizeof(str3)); //字节大小为9
char str4[] = "abcde";
printf("strlen(str4) = %lu\n", strlen(str4)); //字符串长度为5
char str5[100] = "abcde";
printf("strlen(str5) = %lu\n", strlen(str5)); //字符串长度为5
char str6[] = "\0abcde";
printf("strlen(str6) = %lu\n", strlen(str6)); //字符串长度为0
char str7[] = "ab cde";
printf("strlen(str7) = %lu\n", strlen(str7)); //字符串长度为6
return 0;
}
分析:
1、str[100]计算字节大小时如果数组里面有明确数组元素个数的话,就会将元素个数*char型字节计算总的字节大小,也就是(100*1)Byte.
2、str1[]如果没有确定元素个数的话,就会计算字符串常量的字节大小,直至遇到的最后一个空字符\0,计算的也就是“abcde\0”,也就是(6*1)Byte.
3、str2[]计算的是“\0abcde\0”字节大小,也就是(7*1)Byte.
4、str3[]计算的是“\0ab\0c de\0”字节大小,也就是(9*1)Byte.
5、str4[]计算的是“abcde”字符串长度,也就是5.
6、str5[100]不会根据元素个数进行计算,而是根据字符串常量“abcde”计算字符串长度,也就是5.
7、str6[]计算的是“\0”字符串长度,而且strlen只会读到遇到的第一个空字符\0前面的字符串长度,所以为0.
8、str7[]计算的是“ab cde”字符串长度,空格也会被读进去,也就是6.