_debug_strncat — Concatenate strings

Format

#include <string.h>
char *_debug_strncat(char *string1, const char *string2, size_t count,
                     const char *file, size_t line);

Purpose

This is the debug version of strncat. Like strncat, it appends the first count characters of string2 to string1 and ends the resulting string with a null character (\0). If count is greater than the length of string2, the length of string2 is used in place of count.

_debug_strncat validates the heap after appending the characters, and performs this check only when the target is within a heap. _debug_strncat makes an implicit call to _heap_check. If _debug_strncat detects a corrupted heap when it makes a call to _heap_check, _debug_strncat reports the file name file and line number line in a message.

Return values

Returns a pointer to the joined string string1.

Examples

This example contains a programming error. The buffer1 object is not large enough to store the result after eight characters from the string " programming" are concatenated.

/*  _debug_strncat.c */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define  SIZE          10
int main(void)
{
   char *buffer1;
   char *ptr;
   buffer1 = (char*)malloc(SIZE);
   strcpy(buffer1, "computer");
   /* Call strncat with buffer1 and " programming" */
   ptr = strncat(buffer1, " programming", 8);
   printf("strncat: buffer1 = \"%s\"\n", buffer1);
   return 0;
}

The output is similar to:

End of allocated object 0x00073c80 was overwritten at 0x00073c8a.
The first eight bytes of the memory block (in hex) are: 636F6D7075746572.
This memory block was (re)allocated at line number 12 in _debug_strncat.c.
Heap state was valid at line 13 of _debug_strncat.c.
Memory error detected at line 17 of _debug_strncat.c.