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

来源:互联网 发布:博优化纤招聘 编辑:程序博客网 时间:2024/06/04 23:19
今天写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’}; //!< 不会越界
0 0
原创粉丝点击