题主你用strcpy的时候,使用了取地址符&,导致将s[2]的地址复制给了s[0],所以输出时,读入s[0]的地址是s[2]的,又因为字符串连续存储,所以就将s[2]以及它后面的输出了
已知strcpy函数的原型是:
char *strcpy(char *dst, const char *src);
实现strcpy函数
解释为什么要返回char *
假如考虑dst和src内存重叠的情况,strcpy该怎么实现
https://blog.csdn.net/zx249388847/article/details/51751775
strcpy第一个参数是要复制到字符串到哪个地址,而第二个参数是要复制的字符串地址,
strcpy函数复制了"dfg"这个字符串到数组s开头位置,把字符串结束的空字符'\0'也复制过去了,所以导致结果是打印'dfg'。
可以在strcpy复制之前打印一次数组里面的值,然后复制了之后再打印一次数组的值,观察数组在strcpy使用之前和使用之后数组的值的变化。
#include <stdio.h>
#include <string.h>
int main(){
char s[7];
int i,j;
gets(s);
for(i=0;i<7;i++){
printf("s[%d]=%c\n",i,s[i]);
}
for(i=1;i<2;i++){
strcpy(&s[0],&s[2]);
}
puts(s);
for(i=0;i<7;i++){
printf("s[%d]=%c\n",i,s[i]);
}
return 0;
}
首先字符串是以\0结尾的,只是没有显示而已,asdfg\0 ,在你这里strcmp函数将从数组第三个元素地址的内容读取到结尾\0
的内容拷贝到数组中 ,此时数组前四个元素为dfg\0
所以puts函数打印时以\0为结束点 ,所以是dfg,如果有帮助,还请点个采纳哈哈(((o(゚▽゚)o)))