Example 3-4 shows how to use the strcat and strncat functions.
/*  This example uses strcat and strncat to concatenate two    *
 *  strings.                                                   */
#include <stdio.h>
#include <string.h>
main()
{
    static char string1[80] = "Concatenates ";
    static char string2[] = "two strings ";
    static char string3[] = "up to a maximum of characters.";
    static char string4[] = "imum number of characters";
    printf("strcat:\t%s\n", strcat(string1, string2));
    printf("strncat ( 0):\t%s\n", strncat(string1, string3,  0));
    printf("strncat (11):\t%s\n", strncat(string1, string3, 11));
    printf("strncat (40):\t%s\n", strncat(string1, string4, 40));
}
Example 3-4 produces the following output:
$ RUN EXAMPLE1 strcat: Concatenates two strings strncat ( 0): Concatenates two strings strncat (11): Concatenates two strings up to a max strncat (40): Concatenates two strings up to a maximum number of characters. $
Example 3-5 shows how to use the strcspn function.
/*  This example shows how strcspn interprets four             *
 *  different kinds of arguments.                              */
#include <stdio.h>
main()
{
   FILE *outfile;
   outfile = fopen("strcspn.out", "w");
   fprintf(outfile, "strcspn with null charset: %d\n",
                     strcspn("abcdef", ""));
   fprintf(outfile, "strcspn with null string: %d\n",
                     strcspn("", "abcdef"));
   fprintf(outfile, "strcspn(\"xabc\", \"abc\"): %d\n",
                     strcspn("xabc", "abc"));
   fprintf(outfile, "strcspn(\"abc\", \"def\"): %d\n",
                     strcspn("abc", "def"));
}
The sample output, to the file strcspn.out, in Example 3-5 is as follows:
$ RUN  EXAMPLE2 
strcspn with null charset:  6
strcspn with null string:  0
strcspn("xabc","abc"):  1
strcspn("abc","def"):  3
Example 3-6 shows how to use the <stdarg.h> functions and definitions.
/* This routine accepts a variable number of string arguments,   *
 * preceded by a count of the number of such strings. It         *
 * allocates enough space in which to concatenate all of the     *
 * strings, concatenates them together, and returns the address  *
 * of the new string. It returns NULL if there are no string     *
 * arguments, or if they are all null strings.                   */
#include <stdarg.h>         /* Include appropriate header files. */
#include <stdlib.h>
#include <string.h>
/* NSTRINGS is the maximum number of string arguments accepted (arbitrary). */
#define NSTRINGS 10
char    *concatenate (int n, ...)
{
        va_list ap;         /* Declare the argument pointer.     */
        char    *list[NSTRINGS],
                *string;
        int     index = 0,
                size = 0;
        /* Check that the number of arguments is within range.   */
        if (n <= 0)
                return NULL;
        if (n > NSTRINGS)
                n = NSTRINGS;
        va_start (ap, n);   /* Initialize the argument pointer.  */
        do {
             /* Extract the next argument and save it. */
                list[index] = va_arg (ap, char *);
                size += strlen (list[index]);
        } while (++index < n);
        va_end (ap);                     /* Terminate use of ap. */
        if (size == 0)
                return NULL;
        string = malloc (size + 1);
        string[0] = '\0';
        /* Append each argument to the end of the growing result string. */
        for (index = 0;  index < n;  ++index)
                strcat (string, list[index]);
        return string;
}