字符指针赋值:双引号与单引号的区别
发布时间
阅读量:
阅读量
今天在编写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,并使其指向字符串的起始位置。此时sizeof(a) 的计算结果为6(其中包含一个用于结束的’\0’)。
显然,在采用第一种方式进行赋值时,所定义的字符数组末尾并未包含结束符 ’\0’;而第二种方式会自动添加该结束符。因此,在使用第一种方法进行初始化时,应在数组末尾手动添加 ’\0’ 以避免越界问题。例如: char *cP_1 = {‘a’, ‘b’, ‘c’
全部评论 (0)
还没有任何评论哟~
