#include <stdio.h>
#include <string.h>

#define SIZE 100

void copyUsingArray(char destination[],
                    const char source[])
{
    int i = 0;

    while ((destination[i] = source[i]) != '\0')
    {
        ++i;
    }
}

void copyUsingPointer(char *destination,
                      const char *source)
{
    while ((*destination = *source) != '\0')
    {
        ++destination;
        ++source;
    }
}

void concatenateUsingArray(char destination[],
                           const char source[])
{
    int i = 0;
    int j = 0;

    while (destination[i] != '\0')
    {
        ++i;
    }

    while ((destination[i] = source[j]) != '\0')
    {
        ++i;
        ++j;
    }
}

void concatenateUsingPointer(char *destination,
                             const char *source)
{
    while (*destination != '\0')
    {
        ++destination;
    }

    while ((*destination = *source) != '\0')
    {
        ++destination;
        ++source;
    }
}

int main(void)
{
    char source[] = "Hello World";
    char destination1[SIZE] = "";
    char destination2[SIZE] = "";

    copyUsingArray(destination1, source);
    copyUsingPointer(destination2, source);

    printf("Copy using array notation: %s\n",
           destination1);

    printf("Copy using pointer notation: %s\n",
           destination2);

    char first1[SIZE] = "Good ";
    char first2[SIZE] = "Good ";
    char second[] = "Morning";

    concatenateUsingArray(first1, second);
    concatenateUsingPointer(first2, second);

    printf("Concatenate using array notation: %s\n",
           first1);

    printf("Concatenate using pointer notation: %s\n",
           first2);

    return 0;
}