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;
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 个字符中。 与 梅姆集不同,对 梅塞特斯 函数的任何调用都根据抽象机器的规则进行求值,并认为 S 和 N 指示的内存将来可能可访问,并且包含 C指示的值。
运行时约束
- 对于 memset_s 子例程,参数 s 不得为空指针。 smax 或 n 可以大于 RSIZE_MAX,但 n 不能大于 smax。
- 如果存在运行时约束违例,并且 s 不是空指针,并且 smax 不大于 RSIZE_MAX, memset_s 子例程将 c 的值 (转换为无符号字符) 存储到 s所指向的对象的每个前 smax 个字符中。
参数
| 项 | 描述 | |
|---|---|---|
| TARGET | 指向内存区域的开始。 | |
| SOURCE | 指向内存区域的开始。 | |
| C | 指定要搜索的字符。 | |
| n | 指定要搜索的字符数。 | |
| 六 | 指向内存区域的开始。 | |
| 请 | 指定副本的目标缓冲区。 | |
| c | 指定要复制的值。 | |
| 最大值 | 指定可复制的最大字符数。 | |
| n | 指定要复制的字符数。 |
返回值
memccpy 子例程在将字符 C 复制到 Target 参数指定的区域后返回一个指向该字符的指针。 或者如果在 Source 参数指定的区域的前 N 个字符中找不到 C 字符,那么为空指针。
memchr 子例程返回一个指针,该指针指向由 S 参数指定的内存区域的前 N 个字符中第一次出现的 C 字符。 或空指针 (如果找不到 C 字符)。
memcmp 子例程返回以下值:
| 项 | 描述 |
|---|---|
| 小于 0 | 如果 Target 参数的值小于 Source 参数的值。 |
| 等于 0 | 如果 Target 参数的值等于 Source 参数的值。 |
| 大于 0 | 如果 Target 参数的值大于 Source 参数的值。 |
如果没有运行时约束违例,那么 memset_s 子例程返回零。 否则,返回非零值。