# Exercise 5.3 - strcat(s,t) copies the string t to the end of s¶

## Question¶

Write a pointer version of the function strcat that we showed in Chapter 2: strcat(s,t) copies the string t to the end of s.

```#include<stdio.h>

#define MAXLINE 1000

int mgetline(char line[], int lim);

void mystrcat(char *, char *);

int main(void) {
int len;
char s[MAXLINE], t[MAXLINE];

putchar('s');
putchar(':');
mgetline(s, MAXLINE);

putchar('t');
putchar(':');
mgetline(t, MAXLINE);

mystrcat(s, t);

printf("%s", s);

return 0;
}

int mgetline(char line[], int lim) {
int c, i;

for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
line[i] = c;

if (c == '\n') {
line[i] = c;
++i;
}

line[i] = '\0';

return i;
}

void mystrcat(char *s, char *t) {
while (*s != '\0')
s++;
s--;             /* goes back to \0 char */
while ((*s = *t) != '\0') {
s++;
t++;
}
}

```

## Explanation¶

This is a string concatenation program using pointers. The function mystrcat is defined to take two strings as character pointers mystrcat(char *s, char *t) and this function returns the concatenated string in s itself.

The way it does is, the position in s is advanced till we meet a 0 character and then we append the characters from the string t to s, starting from the 0 character till we hit the end of the string t which is a 0 again.

```void mystrcat(char *s,char *t)
{
while(*s!='\0')
s++;
s--;                      /* goes back to \0 char */
while((*s=*t)!='\0')
{
s++;
t++;
}
}
```

The construct while((*s=*t)!=’0’) assigns the character in t to s and then checks if the character is 0.