size如何与memcpy配合使用
How does size work with memcpy?
我的问题与以下代码的安全性有关:
#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
中。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 大于65535的C++数组[size]引发不一致的溢出
- 为什么(-1)%vector::size()总是返回0
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- vector<vector<double>> to mxArray using memcpy
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- vector.size() 在比较中意外工作
- 使用 memcpy() 复制到 std::chrono::milliseconds 会给出错误 -Werror=clas
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 返回 str vs. str.substr(0,str.size()) 在 leetcode 中给了我不同的输出
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 如何使用多次 memcpy 转换回 std::vector<unsigned char>?
- 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?
- 为什么"(!v.empty())"比"(v.size() >0)"好?
- Memcpy C++替代方案
- Qt:memcpy失败了.如何复制?
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- size如何与memcpy配合使用