达人帮忙看看小弟的C程序啊

来源:百度知道 编辑:UC知道 时间:2024/06/05 13:24:57
#include<stdio.h>
void main()
{
char str1[80],str2[80];
void strcpy(char s1[],char s2[]);
gets(str1);gets(str2);
strcpy(str1,str2);
printf("%s\n",str1);
}
void strcpy(char s1[],char s2[])
{
int i;
for(i=0;s2[i]!='\0';i++)s1[i]=s2[i];
s1[i]=s2[i];
}
搞不懂这个函数错哪了,本来比如说STR1是QWERTY,STR2是ASD,那么执行完就应该是ASDRTY,不知道怎么搞的,执行完了STR1是ASD了。。。。。

STR2的中止符被复制到了STR1,i指示当前位置,如当i==2时,条件判断就是s2[2]!='\0',当然成立。当i指向结束符,于是循环中止,而循环外面的s1[i]=s2[i]却把中止符复制到了s1,所以导致了问题

删除 s1[i]=s2[i]; :
void strcpy(char s1[],char s2[])
{
int i;
for(i=0;s2[i]!='\0';i++)s1[i]=s2[i];
}

呵呵,本来就是这样啊,你输入
STR1是QWERTY
STR2是ASD
但是你忘了,两个字符串的结束符是'\0'呀
也就是说,真正的STR1和STR2是
QWERTY'\0'
ASD'\0'
而拷贝的时候,把‘\0’也拷贝过去了
STR1就变成了
ASD‘\0’TY'0'
打印的时候是碰见‘\0’就停止的,所以你看到的结果就只有 ASD 了
解释得够详细了吧,明白了不?