一。概念
1. strlen()
strlen()是库函数,只有在运行时执行。
2. sizeof()
sizeof() 是运算符,用作计算类型的大小,结果类型是size_t ,编译时执行,参数可以是数组、指针、类型、对象、函数等。参数类型与功能关系如下所示。 数组:分配数组空间的大小;
指针:指针所占空间大小(32bit:4、64bit:8);
类型:类型所占空间大小;
结构体:结构体对象所占空间大小;
类:类对象所占空间大小;
函数:函数的返回类型所占的空间大小,函数的返回类型不能是void。
由于是在在编译时计算,因此sizeof()不能计算动态分配的内存空间的大小。
二。代码
//strlen() 与 sizeof() 两个函数的区别
#include "string.h"
#include "stdio.h"
#define MYNAME "abcdefghijk"
#define MAX_NMAE_LEN 20
struct MyStruct
{
int a;
char b;
};
int main()
{ //不同平台不同编译器对比 //vs&win32 //g++&Ubn64
long lCount = sizeof( MYNAME ); //12 //12
char szName[MAX_NMAE_LEN] ;
char *ptName = new char[MAX_NMAE_LEN];
lCount = strlen( szName ); //29 //0
lCount = sizeof( szName ); //20 //20
lCount = strlen( ptName ); //32 //0
lCount = sizeof( ptName ); //4 //8
strcpy( szName, MYNAME );
strcpy( ptName, MYNAME );
lCount = strlen( szName ); //11 //11
lCount = sizeof( szName ); //20 //20
lCount = strlen( ptName ); //11 //11
lCount = sizeof( ptName ); //4 //8
lCount = sizeof( int ); //4
lCount = sizeof( char ); //1
MyStruct szStruct[10];
lCount = sizeof( MyStruct ); //8
lCount = sizeof( szStruct ); //80
return 0;
}