sizeof-strlen

1例子1 sizeof之数组

转载:https://www.cnblogs.com/Waming-zhen/articles/4317014.html

int array[] = {5,2,4,6,1,3};
char str[] = {"This is a string!"};//str[17]=0x00
int length1=0,length2=0,length3=0,length4=0,length5=0,length6=0;
length1 = sizeof(array);//24
length2 = sizeof(array)/sizeof(array[0]);//6

length3 = sizeof(str);//18
length4 = sizeof(str)/sizeof(str[0]);//18
length6 = strlen(str);//17

在平时的编程中,我们会经常用到数组,并且需要知道数组的长度,有时我们可以明确的知道数组的长度,但有时并不,这时,可以借用sizeof(),来获得数组的长度,如下:

arrayLength = sizeof(array) / sizeof(array[0]);

在使用sizeof() 获得数组长度时,需要注意,如果数组array 和 sizeof() 的使用 是在同一个文件中,那么array在定义时,不需要明确数组长度;如果他们在不同的文件中时,则array在定义时必须明确长度,否则会报错 “ incomplete type is not allowed ”。

例:

a.c 文件中定义了数组array

int array[] = {0,1,2,3,4,5,6,7,8,9};

在a.c文件中我们可以用sizeof() 来获得array的长度

arrayLength = sizeof(array) / sizeof(array[0]);

或者

arrayLength = sizeof(array) / sizeof(int);

如果此时我们在b.c文件中使用同样的方法来获得array的长度,那么在编译时会报" incomplete type is not allowed "错误

whatever is worth doing is worth doing well...

2 例子2 sizeof数组,字符,字符串

转载:https://blog.csdn.net/ddl2111/article/details/80372563

int arr[] = {1, 2, 3, 4};

sizeof(arr) = 16;

char arr[] = "abc";

sizeof(arr) = 4;

strlen(arr)=3

char arr[] = {'1', '2', '3'};

sizeof(arr) = 3;

strlen(arr)=3

注意:当数组作为函数参数传递当时候,表示当是指针,不能用sizeof(名称),求出来当是计算机字长。

3 sizeof和strlen区别联系

转载:https://blog.csdn.net/21aspnet/article/details/1539951

3.1

char str[20]="0123456789";
int   a=strlen(str); /*a=10;strlen 计算字符串的长度,以'为字符串结束标记。
int   b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响

3.2

char *str1="absde";
char str2[]="absde";
char str3[8]={'a',};
char ss[] = "0123456789";

输出:

sizeof(str1)=4
sizeof(str2)=6;
sizeof(str3)=8;
sizeof(ss)=11

首先说明一点,char类型占一个字节,所以sizeof(char)是1,这点要理解

str1是一个指针,只是指向了字符串"absde"而已。所以sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。所以sizeof(str1)=sizeof(char*)=4,在C/C++中一个指针占4个字节

str2是一个字符型数组。C/C++规定,对于一个数组,返回这个数组占的总空间,所以sizeof(str2)取得的是字符串"absde"占的总空间。"absde"中,共有a b s d e 六个字符,所以str2数组的长度是6,所以sizeof(str2)=6*sizeof(char)=6

str3已经定义成了长度是8的数组,所以sizeof(str3)为8

str4和str2类似,'0' '1' ... '9'加上''共11个字符,所以ss占的空间是8

总之,对于指针,sizeof操作符返回这个指针占的空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。char与char[]容易混淆,一定要分清,而且char="aaa"的写法现在不被提倡,应予以避免
而strlen不区分是数组还是指针,就读到为止返回长度。而且strlen是不把计入字符串的长度的。

原文地址:https://www.cnblogs.com/xuyan123/p/14767578.html