memccpy , memchr , memcmp , memcpy , memset , memset_s 或 memmove 子例程

用途

执行内存操作并处理运行时约束违例。

标准 C 库 (libc.a)

语法

#include <memory.h>
#include <string.h>
#define STDC_WANT_LIB_EXT1 1
void *memccpy (Target, Source, C, N)
void *Target;
const void *Source;
int C;
size_t N;
void *memchr ( S, C, N)
const void *S;
int C;
size_t N;
int memcmp (Target, Source, N)
const void *Target, *Source;
size_t N;
void *memcpy (Target, Source, N)
void *Target;
const void *Source;
size_t N;
void *memset (S, C, N)
void *S;
int C;
size_t N;
void *memmove (Target, Source,N)
void *Source;
const void *Target;
size_t N;
errno_t memset_s (s,smax,c,n)
void * s;
rsize_t smax;
int c;
rsize_t n;

描述

memory 子例程对内存区域进行操作。 内存区域是由计数限定的字符数组。 memory 子例程不会检查任何接收内存区域的溢出。 所有 memory 子例程都在 memory.h 文件中声明。

memccpy 子例程将字符从 Source 参数指定的内存区域复制到 Target 参数指定的内存区域。 memccpy 子例程在复制 C 参数指定的第一个字符 (转换为 unsigned char 数据类型) 之后停止,或者在复制 N 个字符之后停止,以先到者为准。 如果在重叠的对象之间进行复制,那么行为未定义。

梅姆奇普 子例程将由 目标 参数指定的内存区域中作为 无符号字符数据类型的前 N 个字符与由 参数指定的内存区域中作为 无符号字符 数据类型的前 N 个字符进行比较。

梅姆奇皮 子例程将 N 字符从 参数指定的内存区域复制到 目标 参数指定的区域,然后返回 目标 参数的值。

梅姆集 子例程将 S 参数指定的内存区域中的前 N 个字符设置为字符 C. 的值,然后返回 S 参数的值。

memcpy 子例程一样, memmove 子例程将 N 个字符从 Source 参数指定的内存区域复制到 Target 参数指定的区域。 但是,如果 目标 参数的区域重叠,那么将以非破坏性方式从右到左执行移动。

memccpy 子例程不在 ANSI C 库中。

memset_s 子例程将 c 的值 (转换为无符号字符) 复制到 s所指向的对象的每个前 n 个字符中。 与 梅姆集不同,对 梅塞特斯 函数的任何调用都根据抽象机器的规则进行求值,并认为 SN 指示的内存将来可能可访问,并且包含 C指示的值。

运行时约束

  1. 对于 memset_s 子例程,参数 s 不得为空指针。 smaxn 可以大于 RSIZE_MAX,但 n 不能大于 smax
  2. 如果存在运行时约束违例,并且 s 不是空指针,并且 smax 不大于 RSIZE_MAXmemset_s 子例程将 c 的值 (转换为无符号字符) 存储到 s所指向的对象的每个前 smax 个字符中。

参数

描述
TARGET 指向内存区域的开始。  
SOURCE 指向内存区域的开始。  
C 指定要搜索的字符。  
n 指定要搜索的字符数。  
指向内存区域的开始。  
指定副本的目标缓冲区。  
c 指定要复制的值。  
smax 指定可复制的最大字符数。  
n 指定要复制的字符数。  

返回值

memccpy 子例程在将字符 C 复制到 Target 参数指定的区域后返回一个指向该字符的指针。 或者如果在 Source 参数指定的区域的前 N 个字符中找不到 C 字符,那么为空指针。

memchr 子例程返回一个指针,该指针指向由 S 参数指定的内存区域的前 N 个字符中第一次出现的 C 字符。 或空指针 (如果找不到 C 字符)。

memcmp 子例程返回以下值:

描述
小于 0 如果 Target 参数的值小于 Source 参数的值。
等于 0 如果 Target 参数的值等于 Source 参数的值。
大于 0 如果 Target 参数的值大于 Source 参数的值。

如果没有运行时约束违例,那么 memset_s 子例程返回零。 否则,返回非零值。