zoukankan      html  css  js  c++  java
  • C++定义字符数组

    问:C++中定义字符型数组时''是不是也占一位?是不是定义char a[5],只能有4个字符?那计算字符长度时又否忽略''?

    答:

    C++中定义字符型数组时''是不是也占一位?是不是定义char a[5],只能有4个字符,(是的,如果你把这个字符数组看成一个字符串的话,这里应该是最多4个字符,)
    那计算字符长度时又否忽略''? (是的)

    解释:

    定义char a[5],则说明,a是个字符数组,在内存中占五个字节空间
    如果用a来存储字符串,则最多只能有4个有效字符,必须给留个空间。

    计算a的长度与a的大小是不同的概念
    a按字符串来算长度是从a这个地址开始,计数到字符,这之间的字符个数是字符串a的长度。
    一般常用strlen()函数来获取字符串长度。
    计算a的大小用sizeof命令,sizeof(a)得到的是a在内存中占的字节数!

    字符串与字符数组不要混为一谈。它们相同在形式上,区别就在,字符串一定有结束符,而数组不需要!
    什么是字符串?就是以双引号引起来的数据才叫字符串。字符数组可以存储字符串!

    示例:

     1     char szbufA[5]="ABCD";
     2     //szbufA表达式的值:0x0035f9bc "ABCD"
     3 
     4     //szbufC[5]="ABCD1"; //编译报错 error C2440: “=”: 无法从“const char [6]”转换为“char”
     5     
     6     char szbufB[5];
     7     szbufB[0]='a';
     8     szbufB[1]='b';
     9     szbufB[2]='c';
    10     szbufB[3]='d';
    11     szbufB[4]='e';
    12     //szbufB表达式的值:0x0035f9ac "abcde烫烫烫烫烫藺BCD"
    13     
    14     int na = sizeof(szbufA);//na=5
    15     int naa = strlen(szbufA);//naa=4
    16     int nb = sizeof(szbufB);//nb=5
    17     int nbb = strlen(szbufB);//nbb=20

     从以上代码的1-12行代码中可以看出,定义字符数组时,使用字符串初始化只能使用长度为数组大小(n-1)的字符串。使用大于等于字符数组长度的字符串初始化会报错。

    从以上代码第2、12和17的代码中可以看出,使用五个字符分别给szbufB字符数组赋值,导致szbufB数组没有''结束符,szbufB数组的表达式值是错误的,szbufB的长度不是5,而是20了。

    把szbufB字符数组拷贝到其他字符数组或者字符串地址时,拷贝的内容可能会出错。因为szbufB数组没有''结束符。

    总结:定义字符数组保存字符串时,字符数组大小= 字符串长度 + 1。sizeof数组名,是计算数组占用字节的大小。strlen数组名,是计算数组中字符串的长度(不包括''结束符)。

     
  • 相关阅读:
    哈夫曼编码-C语言实现
    KMP和BF算法-C语言实现
    Spring框架(1)--只是入门
    MyBatis(1)
    antd TreeSelect 无限级选择
    download下载文件
    react搭建项目问题
    js 数组转tree结构
    反映复制到剪贴板(npm安装)
    js前端实现Table导出excel表格
  • 原文地址:https://www.cnblogs.com/lisuyun/p/6393198.html
Copyright © 2011-2022 走看看