#include <stdio.h>
#include <stdlib.h>
// write your code here
void Strcat(char *s1, char *s2);
int main()
{
char str1[200];
char str2[100];
gets(str1);
gets(str2);
Strcat(str1, str2);
return 0;
}
void Strcat(char *s1,char *s2)
{ char *s=s1;
while(*s1!='\0')
s1++;
s1--;
while((*s1=*s2)!='\0')
{s1++;s2++;}
printf("%s\n",s);
}
改动处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
// write your code here
void Strcat(char *s1, char *s2);
int main()
{
char str1[200];
char str2[100];
gets(str1);
gets(str2);
Strcat(str1, str2);
printf("%s\n",str1); //修改
return 0;
}
void Strcat(char *s1,char *s2)
{ char *s=s1;
while(*s1!='\0')
s1++;
//s1--; 修改
while((*s1=*s2)!='\0')
{s1++;s2++;}
*s1='\0'; //修改
//printf("%s\n",s); 修改
}
把 s-- 去掉,参考如下修改:
#include <stdio.h>
#include <stdlib.h>
// write your code here
void Strcat(char *s1, char *s2);
int main()
{
char str1[200];
char str2[100];
gets(str1);
gets(str2);
Strcat(str1, str2);
return 0;
}
void Strcat(char *s1,char *s2)
{
char *s=s1;
while(*s1!='\0')
s1++;
// s1--;
while((*s1=*s2)!='\0')
{
s1++;
s2++;
}
printf("%s\n",s);
}
慎重使用gets()函数,gets()函数不是很安全,它不检查输入字符串的长度,可能导致缓冲区溢出。可以使用fgets()函数代替
你的Strcat函数中输入字符串最好用一下const char类型,你又不修改输入字符串。
边界处理有问题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Strcat(char* dest, const char* src);
int main()
{
char str1[200];
char str2[100];
fgets(str1, sizeof(str1), stdin);
fgets(str2, sizeof(str2), stdin);
Strcat(str1, str2);
printf("%s", str1);
return 0;
}
void Strcat(char* dest, const char* src)
{
// 将指针移动到目标字符串的末尾
while (*dest != '\0')
{
dest++;
}
// 将源字符串复制到目标字符串中
while (*src != '\0')
{
// 检查缓冲区溢出
if (dest >= (dest + sizeof(dest) - strlen(src) - 1))
{
fprintf(stderr, "Error: Destination string overflow\n");
exit(EXIT_FAILURE);
}
*dest = *src;
dest++;
src++;
}
// 在字符串末尾添加空字符
*dest = '\0';
}