当前位置: C语言 -- 附录 -- memset_s

memset_s函数


概要:
#define __STDC_WANT_LIB_EXT1__ 1
#include <string.h>
errno_t memset_s(void *s, rsize_t smax, int c, rsize_t n);

描述:

该函数将参数c的值(转换为unsigned char类型。)复制到参数s指向对象的前n个字符中。

memset函数不同,对memset_s函数的任何调用都应严格按照ISO/IEC 9899:2018标准第5.1.2.3 Program execution节中描述的抽象机规则进行评估;也就是说,对memset_s函数的任何调用都应假定参数s和参数n指示的内存将来可以访问,因此包含参数c指示的值。


运行约束:

参数s不能是空指针。参数smax和参数n应不大于宏RSIZE_MAX。参数n应不大于参数smax

在存在运行约束冲突的情况下,如果参数s不是空指针,参数smax不大于宏RSIZE_MAX,函数将向参数s指向对象的前smax个字符存入参数c的值(转换为unsigned char类型。)。


参数:
void *s

指向对象的指针。

rsize_t smax

参数s指向对象中可修改的最大字符数。

int c

填充字符,会转换为unsigned char类型。

rsize_t n

填充的字符数。


返回值:

如果不存在运行约束冲突,函数返回0;否则函数返回非0值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
/*安全函数memset_s范例*/

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[]= " 10000";

    if(!memset_s(str, sizeof(str)/sizeof(char), '$', 1)
        puts(str);
    
    return 0;
}


可能输出:

$10000

注:测试时Visual Studio软件还未支持memset_s函数,以上例子仅供参考。


相关内容:
memset 填充内存区域的函数。