易错问题(1)字符串拷贝

我们先给出两条语句,我们要探讨的是能否把第二句中的str2拷贝给第一句中的str1
char *str1="abcd";
char str2[]="abcde";

首先自然涉及到一个存储问题,存储空间的不一样或者是空间大小的不同都会出现问题:str1整个在32平台上占四个字节,str2占六个字节.
str2[]的存储方式我们可以清晰地给出:

字符串是清晰的存储在字符数组中,一个字母占用一个字节,外加\0结尾占用一个字节.

至于前者指针的情况,它占用四个字节如何去存储五字节的字符串(还有\0结尾),所以说直接进行字符串的拷贝肯定会出错.事实上前者的数据是存储在了常量区,原指针只是保存了"abcde"在常量区的地址:
即*str=1000,既然放在了常量区则指针就只能进行写操作而不能修改常量.另外还要注意区分是否是越界的情况,如strcpy_s("sfdsddf","rtyuio"),问题并不是出再来越界上,从根本上来说是因为前者是常量,常量又怎末可以修改常量.


猜你喜欢

转载自blog.csdn.net/zhanxiao5287/article/details/79966718
今日推荐