zoukankan      html  css  js  c++  java
  • 字符串的sizeof长度及strlen长度

    在C/C++中,字符串是以零('')结尾的。比如,对于下面的字符串:

    "hello" 
     
    在最后一个字符'd'后面,还有一个我们肉眼看不见的''字符,作为该字符串的结束符。所以,"Hello"其在内存中的存储形式为:

    'H' 'e' 'l' 'l' 'o' ''

    最后有一个我们看不见的''。明白了字符串的结尾方式,那么如何计算字符串的长度呢?比如:

    例题1:
    char str1[]="12345678";
    char str2[]={'1','2','3','4','5','6','7','8'};
    char str3[]={'1','2','3','','5','6','7','8'};
    sizeof(str1)=?
    sizeof(str2)=?
    sizeof(str3)=?
    strlen(str1)=?
    strlen(str2)=?
    strlen(str3)=?

    分析:
    str1是一个字符数组,由字符串"12345678"进行初始化。由于"12345678"含有一个结尾字符'',所以str1数组共有9个字符。 因此sizeof(str1)=9。

    str2也是一个字符数组,它的长度由'1','2','3','4','5','6','7','8'8个字符初始化,并没有指明零字符。 因此sizeof(str2)=8。

    str3同样由8个字符初始化,因此sizeof(str3)=8。


    strlen函数只计算字符串中不含零的字符个数。因此:strlen(str1)=8。

    而由于str2中最后一个字符不包含零,所以,str2不是一个有效的字符串, 因此strlen(str2)不确定。

    而对于字符数组str3,在第4个字符为'',所以作为一个字符串,在此处结尾。所以strlen(str3)=3。

    答案:
    sizeof(str1)=9
    sizeof(str2)=8
    sizeof(str3)=8
    strlen(str1)=8
    strlen(str2)=无结束字符0,所以字符串溢出,不确定
    strlen(str3)=3

    例题2:实现strlen方法。

    分析:既然字符串是以''结尾的,那么实现strlen也就很简单了,直接从左往右遍历字符串,遇到''就退出。
    size_t strlen (const char * str)
    {
        const char *eos = str;
        while( *eos++ )  
             ;
        return( eos - str - 1 );
    }


    那么,有没有不是以零结尾的字符串表示方法呢?实际上是有的。比如:UNICODE_STRING, ANSI_STRING。

    这两种类型的字符串表示方法, 就不是以零结尾的了,而是以首地址和有效长度来定义字符串。

  • 相关阅读:
    8.30 树上最大流
    8.30 巫师之旅
    将一个文件夹中所有图片的名字填充为6位数的长度
    将位于同一文件夹中的多个视频中的图片保存在一个文件夹中
    将视频中所有图片保存到一个文件夹中
    pytorch的基础记录
    mnist数据集进行自编码
    循环神经网络进行回归
    循环神经网络进行分类
    卷积神经网络
  • 原文地址:https://www.cnblogs.com/fengxing999/p/11142831.html
Copyright © 2011-2022 走看看