程序目的主要就是模仿strncat函数,结果会缓冲区溢出,球球告诉我为什么
#include <stdio.h>
#include <string.h>
char * mystrncat(char*,char*,int);
int main(void) {
char s1[80],s2[80];
while (fgets(s1,80,stdin)!=NULL&&(s1[0]!='\n'))
{
fgets(s2,80,stdin);
printf("\n%s",mystrncat(s1,s2,80));
}
printf("Bye.\n");
return 0;
}
char * mystrncat(char*s1,char*s2,int n)
{
char* ps=s1;
for (;*ps!='\n'&&*ps!='\0';ps++)
continue;
for(int i=0;i<=(n-1);i++,ps++)
*ps=s2[i];
*ps='\0';
return s1;
}
试执行如下,溢出了

#include <stdio.h>
#include <string.h>
char * mystrncat(char*,char*,int);
int main(void) {
char s1[80],s2[80];
while (fgets(s1,80,stdin)!=NULL&&(s1[0]!='\n'))
{
fgets(s2,80,stdin);
printf("\n%s",mystrncat(s1,s2,80));
}
printf("Bye.\n");
return 0;
}
char * mystrncat(char*s1,char*s2,int n)
{
char* ps=s1;
for (;*ps!='\n'&&*ps!='\0';ps++)
continue;
for(int i=0;i<=(n-1);i++,ps++)
*ps=s2[i];
*ps='\0';
return s1;
}
试执行如下,溢出了
