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;
}