| Functions | |||||||||||||||||||||||||||||||||||||||||
| Character manipulation | |||||||||||||||||||||||||||||||||||||||||
| Conversions to and from numeric formats | |||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||
| String manipulation | |||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||
| String examination | |||||||||||||||||||||||||||||||||||||||||
| Memory manipulation | |||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||
| Miscellaneous | |||||||||||||||||||||||||||||||||||||||||
(C11)(C11) | |||||||||||||||||||||||||||||||||||||||||
Defined in header <string.h> | ||
void*memset(void*dest,int ch,size_t count); | (1) | |
void*memset_explicit(void*dest,int ch,size_t count); | (2) | (since C23) |
errno_t memset_s(void*dest, rsize_t destsz,int ch, rsize_t count); | (3) | (since C11) |
count characters of the object pointed to bydest.dest is a null pointer.ch in every location of the destination range[dest, dest+destsz) ifdest anddestsz are themselves valid:dest is a null pointerdestsz orcount is greater thanRSIZE_MAXcount is greater thandestsz (buffer overflow would occur)dest <count <=destsz; in other words, an erroneous value ofdestsz does not expose the impending buffer overflow.memset_s is only guaranteed to be available if__STDC_LIB_EXT1__ is defined by the implementation and if the user defines__STDC_WANT_LIB_EXT1__ to the integer constant1 before including<string.h>.Contents |
| dest | - | pointer to the object to fill |
| ch | - | fill byte |
| count | - | number of bytes to fill |
| destsz | - | size of the destination array |
destdest is not a null pointer anddestsz is valid, writesdestsz fill bytesch to the destination array.memset may be optimized away (under theas-if rules) if the object modified by this function is not accessed again for the rest of its lifetime (e.g.,gcc bug 8537). For that reason, this function cannot be used to scrub memory (e.g., to fill an array that stored a password with zeroes).
This optimization is prohibited formemset_explicit andmemset_s: they are guaranteed to perform the memory write.
Third-party solutions for that include FreeBSDexplicit_bzero or MicrosoftSecureZeroMemory.
#define __STDC_WANT_LIB_EXT1__ 1#include <stdio.h>#include <string.h>#include <stdlib.h> int main(void){char str[]="ghghghghghghghghghghgh";puts(str); memset(str,'a',5);puts(str); #ifdef __STDC_LIB_EXT1__ set_constraint_handler_s(ignore_handler_s);int r= memset_s(str,sizeof str,'b',5);printf("str =\"%s\", r = %d\n", str, r); r= memset_s(str,5,'c',10);// count is greater than destszprintf("str =\"%s\", r = %d\n", str, r);#endif}
Possible output:
ghghghghghghghghghghghaaaaahghghghghghghghghstr = "bbbbbhghghghghghghghgh", r = 0str = "ccccchghghghghghghghgh", r = 22
(C11) | copies one buffer to another (function)[edit] |
(C95) | copies the given wide character to every position in a wide character array (function)[edit] |
C++ documentation formemset | |