### _debug_strset -- Set Characters in String

Format

>     #include <string.h>
>     char *_debug_strset(char *string, size_t c,
>                         const char *filename, size_t line);

Language Level: Extension
_debug_strset is the debug version of strset. Like strset, it sets all characters of string, except the ending null character (\0), to c (converted to a char).

_debug_strset validates the heap after setting all characters of string, and performs this check only when the target is within a heap. _debug_strset makes an implicit call to _heap_check. If _debug_strset detects a corrupted heap when it makes a call to _heap_check, _debug_strset will report the file name file and line number line in a message.

Note: _debug_strset 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_strset, you must compile with the debug memory (/Tm) compiler option. This option maps all strset calls to _debug_strset. You do not have to change your source code, in order for _debug_strset 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_strset returns a pointer to the altered string. There is no error return value.

Example
This example is similar to the strset example, except that it contains a programming error. The string, str, was created without a null-terminator, and strset propagates the letter 'k' until it finds what it thinks is the null-terminator.

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

    int main(void)
    {
       char *str;

       str = (char*)malloc(10);

       strnset(str, 'x', 5);
       strset(str+5, 'k');
       printf("This is the string after strset: %s\n", str);
       return 0;

       /****************************************************************************
          The output should be:

          End of allocated object 0x00073c80 was overwritten at 0x00073c8a.
          The first eight bytes of the memory block (in hex) are: 78787878786B6B6B.
          This memory block was (re)allocated at line number 9 in strset.c.
          Heap state was valid at line 11 of strset.c.
          Memory error detected at line 12 of strnset.c.
       ****************************************************************************/
    }

Managing Memory with Multiple Heaps

_debug_memset -- Set Bytes to Value
_debug_strnset -- Set Characters in String
_heap_check -- Validate Default Memory Heap
strnset - strset -- Set Characters in String
<string.h>
/Tm compiler option