在学习C语言的过程中有些初学者对字符串操作函数strcpy(str1, str2)的效果有疑问,到底strcpy是将字符串str2覆盖全部的str1,还是复制过去后str1中未被占用的空间还保存着原来的字符呢?
我们可以通过指针的偏移来理解这个问题.
在Xcode中运行一段程序:
可以看到在经过strcpy复制后,str1 输出字符串确实只输出了 lm . 我们让指向str1首字母的指针p偏移致第三位(p + 2),输出为空,此位置就是str2的'\0'位,但是我们再让指针偏移1位得到输出结果为def.可见str1字符串此时类似于 {'l', 'm', '\0', 'd', 'e', 'f', '\0'}.因为printf打印时读到'\0'是默认输出结束,后面部分不再输出.