sizeof运算符返回一个对象或者类型所占的内存字节数,
strlen 返回的是字符串或字符数组有效元素的个数;
但计算字串时,sizeof运算符会将字符串结束标志计算在内,
而strlen 只是返回有效元素的个数,即’\0’前字符的个数。
例子如下:
#include<stdio.h>
#include<string.h>
int main()
{
char b[] = { 'a', 'b', 'c', 'd' };
printf("sizeof(b)=%d\n", sizeof(b));
printf("strlen(b)=%d\n", strlen(b));
char b1[] = { 'a', 'b', 'c', 'd' ,'\0'};
printf("sizeof(b1)=%d\n", sizeof(b1));
printf("strlen(b1)=%d\n", strlen(b1));
char b2[] = "IT crowd";
printf("sizeof(b2)=%d\n", sizeof(b2));
printf("strlen(b2)=%d\n", strlen(b2));
return 0;
}
分析:
字符数组b存放四个字符,
sizeof计算内存大小,四个字符就占四个字节,返回4;
strlen计算有效字符个数,它将字符串结束标志’\0’前的所有字符视为有效字符,b中无 ‘\0’,不确定在何处结束,所以返回一个随机数。
字符数组b1比b多了一个字符串结束标志’\0’,
sizeof计算内存大小,五个字符就占五个字节,返回5;
strlen计算有效字符个数,’\0’前有四个字符,所以返回4.
字符串b2中有八个字符,字符串末尾自动会加上一个字符串结束标志’\0’,共计九个字符。
sizeof计算内存大小,九个字符就占九个字节,返回9;
strlen计算有效字符个数,’\0’前有8个字符,所以返回8.
运行结果: