本文主要是介绍sizeof与strlen函数的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
strlen是函数,而sizeof是算符
strlen函数,用来求字符串的长度,sizeof函数是用来求指定变量或变量类型(操作数)等所占用内存的大小且存储大小由操作数的类型决定。
若操作数具有类型char、unsigned char或signed char,其结果等于1。
ANSI C正式规定字符类型为1字节。 其他类型:int(4)、unsigned int(4) 、short int(2)、unsigned short(2) 、longint(4) 、unsigned long(4)、float(4)、double(8)、longdouble(8)
当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4, 一般来说指针字节数为4。
例1:
int*p; int a[5];
p= a;
sizeof(p)的结果是4。
例2:
const char*pstars[]={"aa","bb","cc","dd"};
constint starCount=size of pstars/sizeof pstars[0];
sizeofpstars[0]的结果是4
当操作数具有数组类型时,其结果是数组的总字节数。
例如:int a[12]; sizeof(a)的结果是12 * 4 = 48。
联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数,包括任何垫补在内。
让我们看如下结构:
struct {char b; double x;} a;
vc6.0结果为16
这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被8整除的地址。
对于静态数组处理:
char str[20]="0123456789";
strlen(str)=10; //表示数组中字符串的长度
sizeof(str)=20; //表示数组变量分配的长度
对于指针处理:
char *str="0123456789";
strlen(str)=10; //表示字符串的长度
sizeof(str)=4; //表示指针变量的所占内存大小
sizeof(*str)=1; //表示'0'这个字符变量的所占内存大小
对于数组:
char x[]="string";
x[0]=0; x[1]='\0';
计算:sizeof(x) = 7 strlen(x) =0
声明x的时候x里面存储的是"string\0",最后的\0是结束符,所以sizeof(x)就是7。
而\0的asccii码值为0,strlen(x)是计算到\0位置,strlen(x)也就是0了
如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。
例如:
void Func(int*c)
{printf("%d/n",sizeof(c));
}
void Func(intc[13])
{printf("%d/n",sizeof(c));
}
打印的都是4。
Strlen函数以符号\0结束
这篇关于sizeof与strlen函数的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!