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

答:

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

解释:

定义char a[5],则说明,a是个字符数组,在内存中占五个字节空间
如果用a来存储字符串,则最多只能有4个有效字符,必须给\0留个空间。 计算a的长度与a的大小是不同的概念
a按字符串来算长度是从a这个地址开始,计数到\0字符,这之间的字符个数是字符串a的长度。
一般常用strlen()函数来获取字符串长度。
计算a的大小用sizeof命令,sizeof(a)得到的是a在内存中占的字节数! 字符串与字符数组不要混为一谈。它们相同在形式上,区别就在,字符串一定有\0结束符,而数组不需要!
什么是字符串?就是以双引号引起来的数据才叫字符串。字符数组可以存储字符串!

示例:

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

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

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

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

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

 

C++定义字符数组的更多相关文章

  1. C 语言字符数组的定义与初始化

    1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'} ...

  2. 字符数组char

     数组做sizeof的参数不退化,传递给strlen就退化为指针: #include<stdio.h> #include<stdlib.h> #include<strin ...

  3. c语言字符数组与字符串的使用详解

    转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...

  4. c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  5. C语言博客作业--字符数组

    一.PTA实验作业 题目1:统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 Begin 定义字符型变量ch,pre=' ': 定义整型变量count://用来记录单词个数 count ...

  6. c字符数组

    一.PTA实验作业 题目1:统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 定义一个长度为1000的字符数组str[1000] 在定义 i=0,cnt=0:cnt用来记录单词的个数 ...

  7. C语言---字符数组

    一.PTA实验作业 题目1:7-2 统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 定义循环变量i,j定义不为空格的字符数count,定义单词数number,i,j,count,nu ...

  8. c语言字符数组的初始化问题

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  9. C语言中整形数组、字符数组、字符串的区别

    一. 第一 整型数组的存放,数组最后是不加'\0'的,字符串会自动加上,因此存放字符的时候数组的大小要比实际字符的多一个 第二 整型数组 每一个单元是4个字节的,字符串是一个一个字符存放的,每个字符占 ...

随机推荐

  1. HDOJ 1770 - 阅读理解...树形DP

    题意: 一个能量E可以通过吸收某个光子的能量变成E1或者释放某个光子的能量变成E2...并且任意两个能量的转化路径至多一条...现在有一堆能量,有一堆光子...如果某个能量与某个光子做直接运算(加上其 ...

  2. [leetcode]Decode Ways @ Python

    原题地址:https://oj.leetcode.com/problems/decode-ways/ 题意: A message containing letters from A-Z is bein ...

  3. WPF获取当前用户控件的父级窗体

    方式一.通过当前控件名获取父级窗体 Window targetWindow = Window.GetWindow(button); 方式二.通过当前控件获取父级窗体 Window parentWind ...

  4. ubuntu16 64位 编译64位程序和32位程序

    安装了ubuntu16 64位的系统,想在该环境下用gcc编译64位和32位的程序 默认已经安装了64位环境的gcc 1. 首先确认安装的环境是不是64位的 cocoa@cocoaUKlyn:~/De ...

  5. [BetterExplained]为什么你应该(从现在开始就)写博客

    (一)为什么你应该(从现在开始就)写博客 用一句话来说就是,写一个博客有很多好处,却没有任何明显的坏处.(阿灵顿的情况属于例外,而非常态,就像不能拿抽烟活到一百岁的英国老太太的个例来反驳抽烟对健康的极 ...

  6. InnoDB 存储引擎的主要知识点介绍

    本文转载自:Draveness,略有修改 原文链接:『浅入浅出』MySQL 和 InnoDB · 面向信仰编程 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite ...

  7. Background Media Recovery terminated with ORA-1274 after adding a Datafile (Doc ID 739618.1)

    APPLIES TO: Oracle Database - Enterprise Edition - Version 9.2.0.1 to 12.1.0.2 [Release 9.2 to 12.1] ...

  8. Effective Java 第三版——47. 优先使用Collection而不是Stream来作为方法的返回类型

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  9. H5的Video事件,控制方法,及监听

    1.标签基本属性 src :视频的属性 poster:视频封面,没有播放时显示的图片preload:预加载autoplay:自动播放loop:循环播放controls:浏览器自带的控制条width:视 ...

  10. C# 给枚举类型增加一个备注特性

    /// <summary> /// 备注特性 /// </summary> public class RemarkAttribute : Attribute { /// < ...