首页 > 代码库 > sizeof 和 strlen 的区别

sizeof 和 strlen 的区别

 

#include <stdio.h>#include <string.h>int main (int argc, char **argv){    char *a = "0123456789";    char b[] = "0123456789";    char c[100] ="0123456789";    int d[100] ={0,1,2,3,4,5,6,7,8,9};    char e[8] = "abc0\0e123\0ed3\0f";
    char f[] = "abc\\nt\012\xa1*2";    printf("char *a = \"%s\"\n",a);    printf("char b[] = \"%s\"\n",b);    printf("char c[100] = \"%s\"\n",c);    printf("int d[100] = \"%s\"\n",d);    printf("int e[8] = \"%s\"\n",e);
    printf("int f[] = \"%s\"\n",f);
    printf("--------------------\n");    printf("sizeof(a) = %d\n",sizeof(a));    printf("strlen(a) = %d\n",strlen(a));    printf("sizeof(b) = %d\n",sizeof(b));    printf("strlen(b) = %d\n",strlen(b));    printf("sizeof(c) = %d\n",sizeof(c));    printf("strlen(c) = %d\n",strlen(c));    printf("sizeof(d) = %d\n",sizeof(d));    printf("strlen(d) = %d\n",strlen(d));    printf("sizeof(e) = %d\n",sizeof(e));    printf("strlen(e) = %d\n",strlen(e));
    printf("sizeof(f) = %d\n",sizeof(f));
    printf("strlen(f) = %d\n",strlen(f));} /* ----- End of main() ----- */

 

输出:

[zbq@centos6~/coder]$ gcc 6-3.c   6-3.c: 在函数‘main’中:6-3.c:29: 警告:用以初始化字符数组的字符串太长6-3.c:44: 警告:传递‘strlen’的第 1 个参数时在不兼容的指针类型间转换/usr/include/string.h:399: 附注:需要类型‘const char *’,但实参的类型为‘int *’[zbq@centos6~/coder]$ ./a.out   char *a = "0123456789"char b[] = "0123456789"char c[100] = "0123456789"int d[100] = ""int e[8] = "abc0"--------------------sizeof(a) = 4strlen(a) = 10sizeof(b) = 11strlen(b) = 10sizeof(c) = 100strlen(c) = 10sizeof(d) = 400strlen(d) = 0sizeof(e) = 8strlen(e) = 4
sizeof(f) = 11 
strlen(f) = 10
 

 

从以上的例子可以总结:

sizeof:

1.是操作符。

2.是计算在内存中预分配的大小,因此在预编译时计算,故可以用sizeof定义数组维数。

3.sizeof(d) = 400 说明数组的大小是各维数的乘积*数组元素的大小。

4.sizeof(e) = 8可以看出数组在内存中的大小是以维数为标准的,而非后面的初始化及所赋值。

strlen:

1.是函数。头文件是<string.h>

2.strlen的结果要在运行的时候才能计算出来,专用来计算字符串的长度(必须以"\0"结尾),而不是类型占内存的大小。

3.strlen(e) = 4 说明strlen是以"\0"为结束标志来计算字符串的长度的。

 

其中字符串常量"abc\\nt\012\xa1*2"在内存中所占储存空间字节数是

abc -- 3 个
\\ -- 1个 转义字符
nt -- 2 个
\012 -- 1个 8进制数
\xa1 -- 1个 16进制数
*2 -- 2 个
还有一个字符串结束符。 共 11 字节。

sizeof 和 strlen 的区别