定义字符数组的时候需要注意的地方

对于字符数组而言

char string[10];

当写下上面的代码的时候,一定要明白它的内涵。

10意思是这个数组有10个元素,即10个内存单元。

这10个内存单元是string[0]~string[9],0到9共10个数并没有string[10],string的定义域在0到9之间的整数,10不在定义域范围之内。

string[9]这个内存单元通常被被设置为‘\0’来表达数组的结束标志,也就是这个内存单元不用来存放用户数据。

那么能用来存放用户数据的内存单元就是string[0]~string[8]共9个内存单元。

我们一开始是定义了10个内存单元,本意是希望用来存放10个用户数据,但实际上我们只能存放9个用户数据。

少了一个怎么办?很简单,只需要加上一即可。

char string[11];

这才是定义了能存放10个用户数据的数组。

经常在代码中能看到类似下面的代码

#define NUM 10;

char[NUM+1];

 

或者

char[MAX_PATH+1]

都是同样的道理

总结一下,如果你希望你的数组能存放N个用户数据,那么定义数组的时候就需要定义成char[N+1].

 

上面那个问题确实很繁琐,怎么避免呢?

char name[]="123";

可以通过这种方式来对字符数组初始化,和char name[4]="123";是等价的。

 

为什么字符数组最后一个字符必须是\0呢,因为有个strlen函数会检测这个标志,如果没有\0,这个函数就没法正确的运行。

而除了整型数组之外的数组就不用担心\0的问题,唯一需要注意的就是循环的时候注意数组越界的问题。

 

转载于:https://www.cnblogs.com/yfish/p/9706383.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值