加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sizeof()与strlen()

发布时间:2020-12-16 10:47:26 所属栏目:百科 来源:网络整理
导读:概念: strlen()?? 所求的字符串常量长度是不包括“/0”字符长度,同时strlen是根据’’求字符串长度的,它是一个函数。??? sizeof()? 是运算符,它不是函数。所求字符串常量大小包括“/0”求所占空间大

概念:

strlen()?? 所求的字符串常量长度是不包括“/0”字符长度,同时strlen是根据’’求字符串长度的,它是一个函数。???

sizeof()? 是运算符,它不是函数。所求字符串常量大小包括“/0”求所占空间大小。

概念大家大概懂了,那么我们就直接代码举例吧这样一清二楚:

举例:

char str[]="Hello";
strlen(str)      //5    //一般会说成长度
sizeof(str)      //6    //一般会说成大小
    
char str[10]="Hello";
strlen(str)       //5    因为str数组中还存有一个‘‘;求的是str的字符串长度
sizeof(str)       //10    因为求的是str空间大小
char str[5]="Hello"  //会发生溢出
    
char str[] = { h,e,l,o };  a   //一个字节    "a" 两个字节
cout << strlen(str) << endl;//随机值   //strlen根据‘‘求长度
cout << sizeof(str) << endl;//5
    
char str[10]={ h,o };//未完全初始化
strlen(str)    //5    剩下没有填充的空间,都填充上 0  ‘‘;所以是5            
sizeof(str)    //10   

char str[5]={ h,o } ;//完全初始化,所以无‘‘
strlen(str)    //随机值  因为没有‘‘;
sizeof(str)    //5
    
char str[10]={ h,,o};   //就是数字0,不是字符0
strlen(str)   //2
sizeof(str)   //10
void main()
{
    int val = "1234567"[3]; //这种转义字符只能是八进制  
    cout << val << endl; //3
    char va = 60; //后面跟八进制数字               // ‘x‘表示后面跟一个16进制数  转换成对应的字符
    cout << va << endl;     //‘0‘
    int vac = "48"[1];//在字符串中如果字符数字加上‘‘就证明这个字符数字变成了数值数字,不然字符数字就会是对应ASCII的数值
    cout << vac << endl;   //56           
    vac = "48"[0];  //‘4‘
    cout << vac << endl;//4
}

介绍一种方法找到字符

char a=“0123456789ABCDEF”[size];

size是多少a就是对应的字符。size是多少时就要取该下标的字符

void main()
{
    char str[10];   //没有进行初始化里面的元素可能是随机值
    for(int i=0;i<5;i++)
    {
        str[i] = a + i;
    }
    cout << strlen(str) << endl;//随机值  //因为没有初始化所以数组里面是随机值所以可能没有‘‘;
    cout << sizeof(str) << endl;//10
}

char str[10];//因为是全局变量所以提前会将元素初始化为0
void main()
{
 for(int i=0;i<5;i++)
 {
  str[i] = a + i;
 }
 cout << strlen(str) << endl;//5//因为元素全部为0,所以就相当于有‘‘;
 cout << sizeof(str) << endl;//10
}

void main()
{
    static char str[10];   //静态变量提前会将元素初始化为0
    for(int i=0;i<5;i++)
    {
        str[i] = a + i;
    }
    cout << strlen(str) << endl;//随机值  //因为元素全部为0,所以就相当于有‘‘;
    cout << sizeof(str) << endl;//10
}

void main()
{
    char *str="Hello";
    cout<<strlen(str)<<endl;//5  //字符串常量有‘‘,所以不变
    cout<<sizeof(str)<<endl;//4 因为是指针类型所以是4字节
    
    char *sp="Hello";
    cout << strlen(sp) << endl;//5
    cout << sizeof(*sp) << endl;//1 //*sp值为‘H‘
}

void fun(char str[])   //str[10]将退化为指针相当于char*str,
{
    cout<<strlen(str)<<endl;//5
    cout<<sizeof(str)<<endl;//4
}
void main()
{
    char str[]="Hello";
    cout<<strlen(str)<<endl;//5
    cout<<sizeof(str)<<endl;//6
    fun(str);
}

short *ar[10][10]; //指针数组
void main()
{
    cout<<sizeof(ar)<<endl;//400
}

请大家认真仔细看看上述的举例,你就会了结所以的strlen() and sizeof()的陷阱和漏洞。要仔细哦!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读