本帖最后由 取名难 于 2021-9-10 08:22 编辑
首先,char str1[0] = {0};这句语句表面上是你定义了一个char数组大小由后面初始化(即{}中的元素)来决定,大小为1的字符数组;但是在计算机看来你是定义了一个char指针指向数组的起始地址str1[0],你可以通过str1[0~N]访问里面的元素,也可以通过*(str1+0~N)起始地址加偏移量来访问,数组在计算机看来就是指针。
你在str1定义了一个char型的大小但是通过str2赋值了3个字节大小的值,这样是不对的,但是编译器没有报错,原因是有可能str1后面的内存没有用上,所以就没有报非法访问内存的错误(段错误),但不是次次都是这么好运的,一旦非法访问,程序就崩了
可以使用strcpy的带大小的版本char *strncpy(char *destinin, char *source, int maxlen);由用户指定拷贝多大的内存空间的数据。
str2 好像少写了一个 *号,char *str2 = “aaa”;就是用一个char型指针指向一个常量字符串“aaa”,两个都是指针但然满足strcpy的参数要求啊
PS:你可以更改str2指向谁,但是不能通过*str2(解引用)去修改“aaa”,它是常量,放在常量区,是不可以修改的。
所以strcpy(str1,str2);可以
strcpy(str2,str1);不行