_debug_strnset - Set Characters in String

Format

#include <string.h>
char *_debug_strnset(char *string, int c, size_t n,
                    const char *file, size_t line);

Language Level: Extension

_debug_strnset is the debug version of strnset. Like strnset, it sets, at most, the first n characters of string to c (converted to a char), where if n is greater than the length of string, the length of string is used in place of n.

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

Note: _debug_strnset 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_strnset, you must compile with the debug memory -qheapdebug compiler option. This option maps all strnset calls to _debug_strnset. You do not have to change your source code, in order for _debug_memset to verify the heap.

Note: The -qheapdebug option maps 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_strnset
returns a pointer to the altered string. There is no error return value.

Example
This example contains two programming errors. The string, str, was created without a null-terminator to mark the end of the string, and without the terminator strnset with a count of 10 stores bytes past the end of the allocated object.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
   char *str;
   str = (char*)malloc(10);
   printf("This is the string after strnset: %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: 7878787878797979.
      This memory block was (re)allocated at line number 9 in strnset.c.
      Heap state was valid at line 11 of strnset.c.
   ****************************************************************************/
}


Debugging Memory Heaps
Memory Management Functions
Managing Memory with Multiple Memory Heaps


Debugging Problems with Heap Memory


-qheapdebug Compiler Option
_debug_calloc - Allocate and Initialize Memory
_debug_free - Free Allocated Memory
_debug_heapmin - Free Unused Memory in the Default Heap
_debug_malloc - Allocate Memory
_debug_memcpy - Copy Bytes
_debug_memmove - Copy Bytes
_debug_memset - Set Bytes to Value
_debug_realloc - Reallocate Memory Block
_debug_strcat - Concatenate Strings
_debug_strcpy - Copy Strings
_debug_strncat - Concatenate Strings
_debug_strncpy - Copy Strings
_debug_strset - Set Characters in String
_debug_ucalloc - Reserve and Initialize Memory from User Heap
_debug_uheapmin - Free Unused Memory in User Heap
_debug_umalloc - Reserve Memory Block from User Heap