#include <string.h> char *_debug_strncat(char *string1, const char *string2, size_t count, const char *file, size_t line);
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.
Returns a pointer to the joined string string1.
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.