関数strcatを自分で作ったんですが、ちょっとおかしな点があります。

include<stdio.h>

char *my_strcat(char *s1, char *s2){
int i = 0;
int n = 0;
while(s1[i] != '\0'){
i++;
}
while(s2[n] != '\0'){
s1[i] = s2[n];
i++;
n++;
}
s1[i] = '\0';
return s1;
}

int main(){
char *s1 = "abc";
char *s2 = "vwxyz";
my_strcat(s1, s2);
printf("s1:%s s2:%s\n", s1, s2);
return 0;
}

s1はちゃんと表示されるのですが、s2が一文字少なく表示されてしまいます。
このプログラムのどこをどう直せばよいでしょうか。
お願いします。