美文网首页C++
_countof、sizeof、strlen、_Msize的区别

_countof、sizeof、strlen、_Msize的区别

作者: Caiaolun | 来源:发表于2019-02-14 17:40 被阅读28次

    1 _countof:是系统定义的一个宏,求取元素的数组的元素个数

    2 sizeof:运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,获得保证能容纳实现所建立的最大对象的字节大小

    3 strlen:是一个函数,在运行时执行,返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL

    4 _Msize :是一个函数, 返回开辟空间的大小

    上代码:

        // 1 _countof
        char _aArray[12] = { 1,2,3,4 };
        int elements = _countof(_aArray);
        printf("_countof(_aArray):%d\n\n", elements);
    
        // 2 sizeof
        char* _pBMalloc = (char*)malloc(sizeof(char) * 512);
        char * _pBNew = new char[10];
        char _bArray[15] = {};
        printf("sizeof(_pMalloc): %d\n", sizeof(_pBMalloc));
        printf("sizeof(_pNew): %d\n", sizeof(_pBNew));
        printf("sizeof(_bArray): %d\n\n", sizeof(_bArray));
    
        // 3 strlen
        char* _pCMalloc = (char*)malloc(sizeof(char) * 512);
        char * _pCNew = new char[10];
        char _cArray[15] = { '?', '?', '?', '?'};
        _pCNew = "????-????";
        _pCMalloc = "????-????-????";
        printf("strlen(_pMalloc): %d\n", strlen(_pCMalloc));
        printf("strlen(_pNew): %d\n", strlen(_pCNew));
        printf("strlen(_cArray): %d\n\n", strlen(_cArray));
    
        // 4 _msize
        char* _pDMalloc = (char*)malloc(sizeof(char) * 512);
        char * _pDNew = new char[10];
        char _dArray[15] = {};
        printf("_msize(_pDMalloc): %d\n", _msize(_pDMalloc));
        printf("_msize(_pDNew): %d\n", _msize(_pDNew));
        //ERROR: _msize(_dArray)
        //printf("_msize(_dArray): %d\n\n", _msize(_dArray));
    

    输出:

    \color{red}{\_countof():} 能放几个元素
    \color{red}{sizeof():} 这个单位空间是多少
    \color{red}{strlen():} 这个空间使用了多少
    \color{red}{\_msize():} malloc 或 new 出来的空间大小

    我再这里犯过错

    每次我只能接受4个字符, \color{red}{因为\ sizeof(指针) = 4}

    相关文章

      网友评论

        本文标题:_countof、sizeof、strlen、_Msize的区别

        本文链接:https://www.haomeiwen.com/subject/gjtyeqtx.html