我们如何在C ++中使用字符串包函数设置数组的内存
How can we set the memory of array using cstring packgae functions in c++
我想使用 cstring 的 memset 函数为整个数组分配一个数字 class.bbut 它只适用于 0,如果我为函数 memset 提供任何其他值,它会随机分配一个大整数 no 到内存数组。
memset(arr,0,sizeof(arr));
为此,它工作正常,数组中的每个槽我都分配了 0 个值;
但如果我这样做
memset(arr,1 or any other no,sizeof(arr));
为此,它为数组的每个槽分配了一个随机的较大整数值;
请解释为什么会这样。
我想你想要 std::fill
.
std::memset
是原始函数。它在内存中设置字节,而不是值。二进制的值257
是0x0101
。这向您展示了发生了什么:两个字节都设置为 0x01
.
由于您想将值设置为 0x0001
,显然无法使用 std::memset
这样做,因为它将所有内容都设置为相同的字节值。 std::fill
另一方面理解类型,并且会转换你给它的值。因此它可以在填充浮点数组时将 1
转换为 1.0f
。
我想使用 cstring 的 memset 函数为整个数组分配一个数字 class.bbut 它只适用于 0,如果我为函数 memset 提供任何其他值,它会随机分配一个大整数 no 到内存数组。
memset(arr,0,sizeof(arr));
为此,它工作正常,数组中的每个槽我都分配了 0 个值; 但如果我这样做
memset(arr,1 or any other no,sizeof(arr));
为此,它为数组的每个槽分配了一个随机的较大整数值; 请解释为什么会这样。
我想你想要 std::fill
.
std::memset
是原始函数。它在内存中设置字节,而不是值。二进制的值257
是0x0101
。这向您展示了发生了什么:两个字节都设置为 0x01
.
由于您想将值设置为 0x0001
,显然无法使用 std::memset
这样做,因为它将所有内容都设置为相同的字节值。 std::fill
另一方面理解类型,并且会转换你给它的值。因此它可以在填充浮点数组时将 1
转换为 1.0f
。