sizeof()与strlen()

概念:

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是多少时就要取该下标的字符

838db439-5ed2-48b7-a898-b4008b64a0ac

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()的陷阱和漏洞。要仔细哦!

posted @ 2019-08-04 21:01  Shallow_tipsy  阅读(187)  评论(0编辑  收藏  举报