我试图为10个字节分配内存
BYTE* tmp;
tmp = new BYTE[10];
//or tmp = (BYTE*)malloc(10*sizeof(BYTE));
但是在新的或malloc操作长度* tmp超过10之后(即'\ 0'字符不在tmp数组中的10位)
为什么?
答案 0 :(得分:8)
new[]
和malloc()
都不会为您\0
。{当您为malloc()
致电new[]
或char
时,您需要手动初始化该块 - 将\0
放入最后一个元素,或使用{{1}整个街区。
答案 1 :(得分:6)
'\0'
没有理由在数组的末尾。
malloc(或者就此而言是新的),给你一个10字节的块,这是它为你分配的内存。 你的工作是用你的记忆做任何你想做的事。
你可能会混淆一个字符串(比如char[10]
)。
字符串的整个想法是一个字节数组,但以'\0'
结尾表示它的大小。
您分配的字节数组或任何其他数组不是字符串,不会以'\0'
结束; 你的工作是跟踪它的大小。
答案 2 :(得分:1)
首先,BYTE数组可以包含零,这就是为什么你不能使用strlen来确定数组的长度。
其次,在调用新的BYTE [10]之后,如果你想自动初始化数组为0,你的arrray仍然是未初始化的(包含垃圾),你可以使用以下代码:
BYTE* tmp2;
tmp2 = new BYTE[10]();
但即使在这种情况下你也不能使用strlen,因为strlen返回0。
您必须将数组长度保存到某个变量中,或者只使用std :: vector。