Format
#include <string.h>
char *_debug_strcpy(char *string1, const char *string2,
const char *filename, size_t line);
Language Level: Extension
_debug_strcpy is the debug version of strcpy. Like
strcpy, it copies string2, including the ending null
character, to the location specified by string1.
_debug_strcpy validates the heap after copying the string to the target location, and performs this check only when the target is within a heap. _debug_strcpy makes an implicit call to _heap_check. If _debug_strcpy detects a corrupted heap when it makes a call to _heap_check, _debug_strcpy will report the file name file and line number line in a message.
Note: _debug_strcpy checks only the current default heap. Therefore, this debug support will not check all heaps within applications that have multiple user heaps.
To use _debug_strcpy, you must compile with the debug memory (/Tm) compiler option. This option maps all strncat calls to _debug_strcpy. You do not have to change your source code, in order for _debug_strcpy to verify the heap.
Note: The /Tm option maps all calls to other string functions and all calls to memory management functions (including a heap-specific version), to their debug counterparts. To prevent a call from being mapped, parenthesize the function name.
Return Value
_debug_strcpy returns a pointer to the copied string (string1).
Example
This example is similar to the strcpy example, except that it
contains a programming error. The source string is too long for
the destination buffer, and the strcpy operation damages the
heap.
#include <stdlib.h> #include <stdio.h> #include <string.h>
#define SIZE 10
int main(void)
{
char *source = "1234567890123456789";
char *destination;
char *return_string;
destination = (char*)malloc(SIZE); strcpy(destination, "abcdefg"),
printf("destination is originally = '%s'\n", destination);
return_string = strcpy(destination, source);
printf("After strcpy, destination becomes '%s'\n\n", destination);
return 0;
/****************************************************************************
The output should be 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 13 in strcpy.c.
Heap state was valid at line 14 of strcpy.c.
Memory error detected at line 17 of strcpy.c.
****************************************************************************/
}
![]()
Managing Memory
with Multiple Heaps
![]()
_debug_memcpy -- Copy Bytes
_debug_strncpy -- Copy Strings
_heap_check -- Validate Default Memory
Heap
strcpy -- Copy Strings
strncpy -- Copy Strings
<string.h>
/Tm compiler option