我的问题涉及以下代码的安全性:
#define ARRAY_SIZE 10
std::array<BYTE, ARRAY_SIZE> myArray;
char* string = "this_sentence_is_longer_than_10_bytes"
memcpy(&myArray, string, ARRAY_SIZE);
Run Code Online (Sandbox Code Playgroud)
结果:myArray 已[0-9]填满"this_sente"
就安全而言,我需要知道“字符串”的其余部分发生了什么。由于给定的大小,它是否被完全忽略,或者是否被从数组末尾抛出?
编辑:我现在有
#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);
}
Run Code Online (Sandbox Code Playgroud)
现在,如果字符串短于 10 个字符,它会用零填充 std:array,否则它使用初始方法。
我正在寻找从矢量中删除多个项目的最有效方法?
基本上我将在向量中搜索一个标志并删除具有该标志的对象.
不过,我听说从向量会搞乱删除对象的迭代器,所以什么是最有效的方式来循环虽然矢量(含潜在的成千上万个对象),并删除那些有特定的标志?
我希望不必多次遍历向量.