给字符指针赋值, ” “双引号与' '单引号的区别

本文讨论了在C语言中,使用双引号和单引号给字符指针赋值的区别。双引号表示字符串,包含隐含的结束符'',而单引号表示单个字符。不加''可能导致指针越界。正确做法是确保字符数组末尾包含结束符。
今天写demo,输出一个字符数组时,发现指针越界输出。回头一看,发现是这样给字符指针赋值的: 
char *cP_1 = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’}; 
不严格的说,这样赋值并没有错,只是跟下面这种赋值方法有一些需要注意的区别: 
char *cP_2 = “abcde”; 
这两种方法有什么区别呢?首先要明白” abcde”是一个字符串,它以’ \0 ’ 结尾,输出它的完整值,应该为:{’a’,’b’,’c’,’d’,’e’,’\0’} 。而‘ a ‘只是一个字符,仅仅代表一个单纯的字符值。 
第一种情况下,指将单个独立字符成的字符数组赋值给char * cP_1 ,同时指向第一个字符’a’的地址。但是这种情况下sizeof(cP_1) = 5。 
第二种情况下,是将字符串赋值给char *cP_1,cP_1指向的是字符串的首地址。 
sizeof(a) = 5+1=6; //!< 1为 ‘\0’。 
显而易见,用第一种方法赋值时,字符数组后面没有结束符 ‘\0’,第二种会自动添加’’\0”。因此,需要我们注意的是,当采用第一种方法赋值时,需要在后面加上结束符 ‘\0’。 
如: char *cP_1 = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘\0’}; //!< 不会越界
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值