Просто переместите ваш строковый итератор на один символ назад из-за '\ 0' (после выполнения while(*s++ != '\0');
), и это исправит ваш код.
Объяснение:
Ваш s
строка равна "abcde\0"
. После первого, пока l oop, итератор будет на '\0'
. Если вы оставите его там, вы объедините обе строки, получив результат "abcde\0fghi\0"
, который печатает "abcde"
из-за первого '\0'
.
Вместо этого, если вы переместитесь на итератор строки s
на одну позицию с (s--
), вы получите эту строку как результат "abcdefghi\0"
, которая напечатает строку так, как вы ожидаете.
Фиксированный код:
#include<stdio.h>
char * sstrcat(char*,char*);
void main() {
char *c;
char s[100] = "abcde";
char t[] = "fghi";
c = sstrcat(s,t);
printf("%s\n",c);
}
char* sstrcat(char *s,char *t) {
char* temp = s;
while(*s++ != '\0');
s--;
while((*s++ = *t++) != '\0');
return temp;
}