做了一个函数,把第二个字符串覆盖第一个字符串,但是有有关问题
做了一个函数,把第二个字符串覆盖第一个字符串,但是有问题。
如果第一个输入“abc”,第二个字符串输入“123456”,输出“123456”加几个乱码。
如果第一个输入“123456”,第二个字符串输入“abc”,输出“abc”一切正常。
如果第一个输入“123”,第二个字符串输入“abc”,输出“a23”只有a覆盖了1,但是bc没有覆盖23。

------解决思路----------------------
乱码是因为你字符串最后没以\0结尾,\0被你覆盖成其他字符了
这样改可好;
------解决思路----------------------
如果第一个输入“abc”,第二个字符串输入“123456”,输出“123456”加几个乱码。
如果第一个输入“123456”,第二个字符串输入“abc”,输出“abc”一切正常。
如果第一个输入“123”,第二个字符串输入“abc”,输出“a23”只有a覆盖了1,但是bc没有覆盖23。
#include <stdio.h>
#include <string.h>
#define SIZE 81
char *cpy (char *psx, char *psy);
int main (void)
{
char str1[SIZE];
char str2[SIZE];
char* ps1;
char* ps2;
printf ("Enter firse string:\n");
ps1 = gets (str1);
printf ("Enter second string:\n");
ps2 = gets (str2);
cpy (ps1, ps2);
puts (ps1);
system ("pause");
return 0;
}
char *cpy (char *psx, char *psy)
{
int i = 0;
if (strlen (psx) > strlen (psy))
{
while (psx[i] != '\0')
{
psx[i] = psy[i];
i++;
}
}else if (strlen (psx) < strlen (psy))
{
while (psy[i] != '\0')
{
psx[i] = psy[i];
i++;
}
}else
{
while (psx[i] != '\0')
{
psx[i] = psy[i];
i++;
}
}
return psx;
}
------解决思路----------------------
乱码是因为你字符串最后没以\0结尾,\0被你覆盖成其他字符了
这样改可好;
char *cpy (char *psx, char *psy)
{
int i = 0;
if (strlen (psx) > strlen (psy))
{
while (psy[i] != '\0')
{
psx[i] = psy[i];
i++;
}
}else if (strlen (psx) < strlen (psy))
{
while (psy[i] != '\0')
{
psx[i] = psy[i];
i++;
}
psx[i] = '\0';
}else
{
while (psx[i] != '\0')
{
psx[i] = psy[i];
i++;
}
}
return psx;
}
------解决思路----------------------
char *cpy (char *psx, char *psy)
{
int i = 0;
while (psy[i] != '\0')
{
psx[i] = psy[i];
i++;
}
psx[i]='\0';
return psx;
}