sizeof()与strlen()

Posted ycw1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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是多少时就要取该下标的字符

技术图片

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()的主要内容,如果未能解决你的问题,请参考以下文章

sizeof与strlen的区别

Strlen()与Sizeof()的区别

sizeof 和 strlen 的区别

sizeof与strlen的区别及运用

sizeof 与 strlen 的使用例子

strlen 与 sizeof 的区别