码迷,mamicode.com
首页 > 其他好文 > 详细

sizeof()与strlen()

时间:2019-08-04 21:14:11      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:title   空间   class   bcd   str   转义字符   style   spl   border   

概念:

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

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

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

举例:

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

char str[5]={ h,e,l,l,o } ;//完全初始化,所以无‘\0‘
strlen(str)    //随机值  因为没有‘\0‘;
sizeof(str)    //5
    
char str[10]={ h,e,\0,l,l,o};   //\0就是数字0,不是字符0
strlen(str)   //2
sizeof(str)   //10
void main()
{
    int val = "\0\1\2\3\4\5\6\7"[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;//随机值  //因为没有初始化所以数组里面是随机值所以可能没有‘\0‘;
    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,所以就相当于有‘\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,所以就相当于有‘\0‘;
    cout << sizeof(str) << endl;//10
}

void main()
{
    char *str="Hello";
    cout<<strlen(str)<<endl;//5  //字符串常量有‘\0‘,所以不变
    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()的陷阱和漏洞。要仔细哦!

sizeof()与strlen()

标签:title   空间   class   bcd   str   转义字符   style   spl   border   

原文地址:https://www.cnblogs.com/ycw1024/p/11299711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!