size如何与memcpy配合使用

How does size work with memcpy?

本文关键字:memcpy size      更新时间:2023-10-16

我的问题与以下代码的安全性有关:

#define ARRAY_SIZE 10
std::array<BYTE, ARRAY_SIZE> myArray;
char* string = "this_sentence_is_longer_than_10_bytes"
memcpy(&myArray, string, ARRAY_SIZE);

结果:myArray用"this_sente" 填充[0-9]

就安全性而言,我需要知道"字符串"的其余部分发生了什么。它是由于给定的大小而被完全忽略,还是从数组的末尾抛出?

编辑:我现在有

#define ARRAY_SIZE 10
std::array<BYTE, ARRAY_SIZE> myArray;
char* string = "this_sentence_is_longer_than_10_bytes"
if (strlen(string) < ARRAY_SIZE)
{
    BYTE clearArray[ARRAY_SIZE] = {0};
    memcpy(&myArray, clearArray, ARRAY_SIZE);
    memcpy(&myArray, string, strlen(string));
}
else
{
    memcpy(&myArray, string, ARRAY_SIZE);
}

如果字符串短于10个字符,它现在用零填充std:数组,否则它使用初始方法。

字符串常量的其余部分被忽略,就好像它不在那里一样。CCD_ 3一旦到达size字节就停止。

请注意,尽管将大于size的内存块传递给memcpy是安全的,但传递较短的内存块会触发未定义的行为。例如,如果传递的string少于9个字符,则memcpy会将字符串末尾之后的无效字符复制到myArray中。