#include <string.h> char *_debug_strncpy(char *string1, const char *string2, size_t count, const char *file, size_t line);
This is the debug version of strncpy. Like strncpy, it copies count characters of string2 to string1. If count is less than or equal to the length of string2, a null character (\0) is not appended to the copied string. If count is greater than the length of string2, the string1 result is padded with null characters (\0) up to length count.
_debug_strncpy validates the heap after copying the strings to the target location, and performs this check only when the target is within a heap. _debug_strncpy makes an implicit call to _heap_check. If _debug_strncpy detects a corrupted heap when it makes a call to _heap_check, _debug_strncpy reports the file name file and line number line in a message.
Returns a pointer to string1.
This example contains a programming error. The source string is too long for the destination buffer, and the strncpy operation damages the heap.
/* _debug_strncopy */ #include <stdlib.h> #include <stdio.h> #include <string.h>
#define SIZE 10
int main(void)
{
char *source = "1234567890123456789";
char *destination;
char *return_string;
int index = 15;
destination = (char*)malloc(SIZE); strcpy(destination, "abcdefg"),
printf("destination is originally = '%s'\n", destination);
return_string = strncpy(destination, source, index);
printf("After strncpy, destination becomes '%s'\n\n", destination);
return 0;
}
The output is similar to:
destination is originally = 'abcdefg' End of allocated object 0x00073c80 was overwritten at 0x00073c8a. The first eight bytes of the memory block (in hex) are: 3132333435363738. This memory block was (re)allocated at line number 14 in _debug_strncpy.c. Heap state was valid at line 15 of _debug_strncpy.c. Memory error detected at line 18 of _debug_strncpy.c.