C åèæå
- C è¯è¨
- C å ³é®è¯
- é¢å¤çå¨
- C æ ååºå¤´æä»¶
- ç±»åæ¯æ
- ç¨åºæ¯æå·¥å ·
- å忰彿°
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- ç©ºç»æ¢åèå符串
- isalpha
- islower
- isalnum
- strcpy, strcpy_s
- isupper
- isdigit
- isxdigit
- isblank
- iscntrl
- isgraph
- isspace
- isprint
- ispunct
- tolower
- toupper
- atof
- atoi, atol, atoll
- strtol, strtoll
- strtoul, strtoull
- strtof, strtod, strtold
- strtoimax, strtoumax
- strncpy, strncpy_s
- strcat, strcat_s
- strncat, strncat_s
- strxfrm
- strlen, strnlen_s
- strcmp
- strncmp
- strcoll
- strchr
- strrchr
- strspn
- strcspn
- strpbrk
- strstr
- strtok, strtok_s
- memchr
- memcmp
- memset, memset_s
- memcpy, memcpy_s
- memmove, memmove_s
- strerror, strerror_s, strerrorlen_s
- ç©ºç»æ¢å¤åèå符串
- ç©ºç»æ¢å®½å符串
- ç®æ³
- æ°å¼
- æä»¶è¾å ¥/è¾åº
- æ¬å°åæ¯æ
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C æ ååº
- æç¨çèµæº
- 符å·ç´¢å¼
- 注é
ä½ç½®ï¼é¦é¡µ > C åèæå >åç¬¦ä¸²åº >ç©ºç»æ¢åèå符串 > memset, memset_s
memset, memset_s
| å®ä¹äºå¤´æä»¶ <string.h>
|
||
| void *memset( void *dest, int ch, size_t count ); |
(1) | |
| errno_t memset_s( void *dest, rsize_t destsz, int ch, rsize_t count ); |
(2) | (C11 èµ·) |
1) å¤å¶å¼
ch ï¼å¦å以 (unsigned char)ch 转æ¢å° unsigned char åï¼å° dest ææå对象çé¦ count 个åèã è¥åºç° dest æ°ç»ç»å°¾åç访é®åè¡ä¸ºæªå®ä¹ãè¥
dest 为空æéåè¡ä¸ºæªå®ä¹ã2) å (1) ï¼é¤äºè¥
dest ä¸ destsz èªèº«ææï¼ååå¨ ch äºç®æ èå´ [dest, dest+destsz) çæ¯ä¸ªä½ç½®åï¼å¨è¿è¡æ¶æ£æµä¸åé误ï¼å¹¶è°ç¨å½åå®è£
çå¶çº¦å¤ç彿°ï¼
-
destæ¯ç©ºæé -
destszæcountå¤§äº RSIZE_MAX -
count大äºdestszï¼ä¼åçç¼å²åºæº¢åºï¼
-
è¥
dest ææåçå符æ°ç»å¤§å° < count <= destsz; åè¡ä¸ºæªå®ä¹ï¼æ¢è¨ä¹ï¼é误ç destsz å¼ä¸æ´é²è¡å°åççç¼å²åºæº¢åºã
- åææè¾¹çæ£æ¥å½æ°ï¼
memset_sä» è¥å®ç°å®ä¹äº __STDC_LIB_EXT1__ ï¼ä¸ç¨æ·å¨å å«string.håå®ä¹ __STDC_WANT_LIB_EXT1__ ä¸ºæ´æ°å¸¸é 1 æä¿è¯å¯ç¨ã
åæ°
| dest | - | æåè¦å¡«å ç对象çæé |
| ch | - | å¡«å åè |
| count | - | è¦å¡«å çåèæ° |
| destsz | - | ç®æ æ°ç»çå¤§å° |
è¿åå¼
1)
dest ç坿¬ï¼æ¬è´¨ä¸ºæ´åºå±æä½ç临æ¶å
åå°åï¼å¨å®é
æä½ä¸ä¸å»ºè®®ç´æ¥ä½¿ç¨æ¤å°åï¼æä½å®æä»¥åï¼çæ£ææä¹çå°åæ¯destæ¬èº«ã2) æåæ¶ä¸ºé¶ï¼å¤±è´¥æ¶ä¸ºéé¶ãå¨å¤±è´¥æ¶ï¼è¥
dest 䏿¯ç©ºæéä¸ destsz åæ³ï¼å亦åå
¥ destsz 个填å
åè ch å°ç®æ æ°ç»ã注æ
è¥ memset æä¿®æ¹ç对象å¨å
¶çåæçå©ä½é¨åä¸å被访é®ï¼åæ¤å½æ°å¯ä»¥è¢«ä¼åæï¼å¨å¦åè§åä¸ï¼ï¼ä¾å¦ gcc æ¼æ´ 8537 ï¼ã为æ¤ï¼æ¤å½æ°ä¸è½ç¨äºæ¦æ´å
åï¼ä¾å¦ä»¥ä»¤å¡«å
åå¨å¯ç çæ°ç»ï¼ã对 memset_s ç¦æ¢æ¤ä¼åï¼ä¿è¯è¿è¡å
ååã该é®é¢çç¬¬ä¸æ¹è§£å³æ¹æ¡å
å« FreeBSD explicit_bzero æ Microsoft SecureZeroMemory ã
示ä¾
è¿è¡æ¤ä»£ç
#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 å¤§äº destsz printf("str = \"%s\", r = %d\n", str, r); #endif }
å¯è½çè¾åºï¼
ghghghghghghghghghghgh aaaaahghghghghghghghgh str = "bbbbbhghghghghghghghgh", r = 0 str = "ccccchghghghghghghghgh", r = 22
å¼ç¨
- C11 standard (ISO/IEC 9899:2011):
- 7.24.6.1 The memset function (p: 371)
- K.3.7.4.1 The memset_s function (p: 621-622)
- C99 standard (ISO/IEC 9899:1999):
- 7.21.6.1 The memset function (p: 333)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.11.6.1 The memset function
åé
| (C11) |
å°ä¸ä¸ªç¼å²åºå¤å¶å°å¦ä¸ä¸ª (彿°) |
| (C95) |
å°ç»å®ç宽å符å¤å¶å°å®½å符æ°ç»çææä½ç½® (彿°) |