鸿雁长飞光不度——字符串常量与字符数组

char arr[ ] = “abcde”                         //字符串
char brr[10] = {‘a’,‘b’,‘c’}                //字符串
char crr[ ] = {‘a’’b’’c’’d’’e’};              //字符数组
char *drr = “abcde”;                          //字符串常量
char err[5] = “abcde”;                        //错误!!!越界!

如果有不明白的,请看以下几条总结:

一、    凡是字符串,必以“\0”结尾

二、    凡是双引号中的内容,皆是字符串。也就是说,双引号会在它所包含内容后面自动加一个“\0”,且占据字节数。

所以 char arr[ ] = “abcde”是字符串;

所以char err[5] = “abcde”是错误的,因为双引号的存在给后面加了“\0”,其长度是6个字节,自然不能放入长度为5字节的err中去

三、    单引号中容纳的是char类型的字符常量,且仅能容纳一个

四、    字符数组中若不指定长度,系统会自动匹配合适的长度。

char crr[ ] = {‘a’’b’’c’’d’’e’};

所以,crr不是字符串,因为它后面没有“\0”

五、    如果对字符数组没有初始化完全,系统会自动在未赋值的地方添加“\0”。

所以,根据第一条总结

char brr[10] = {‘a’,‘b’,‘c’} 

是字符串

六、    不能修改字符串常量的值

char *drr = “abcde”;

drr[0] = ‘X’;     //这句会导致崩溃

因为定义drr 为指针,其指向的地址为保存在常量区的字符串“abcde”的首元素地址。可以通过该指针读取到该字符串的每个元素,却不能对其修改。

其原理就如同:a = 250 ,250是个数值常量,如果你现在想让

a = 251 ,你只能给a重新赋值,而做不到只把250中的0换成1上去。

七、    定义字符数组必须同时进行赋值。

如:

char str[7] =“abcd”;

             不能写成

                  charstr[7];

                  str[7]= “abcd”

 

          注意:这个是有例外的。

     如果你不是一次性进行全部赋值,则可以先定义一个字符数组,之后再对其中的元素挨个赋值,如:

 
int main()
{
 char str[7];
 str[0] = 'a';
 str[1] = 'b';
 str[2] = 'c';
 str[3] = 'd';
 str[4] = '\0';
 printf("%s\n",str); 
}

 

其打印出来的字符串,也是 abcd

还要注意一点,如果你不自己对末尾赋值’\0’,系统是不会将其用’\0’补充的

 

如:

int main()
{
 char str[7];
 str[0] = 'a';
 str[1] = 'b';
 str[2] = 'c';
 str[3] = 'd';
 printf("%s\n",str); 
}
 

 

其打印出来的结果为 :  

 

 

abcd烫烫烫烫烫烫烫烫烫烫烫烫烫烫XX

 

这是由于没有初始化完全,导致没有’\0’作为字符串的结束标志,使后面的值无法预测。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值