C/C++中 sizeof()与strlen()的区别

来源:互联网 发布:vscode微信小程序插件 编辑:程序博客网 时间:2024/05/13 10:54

一。概念

    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;
}




0 0