在C中,如果我初始化一个这样的char数组:
char lines[5];
memcpy((char *)line,"Hello",5)
然后,如果我执行以下表达式:
line[6]='\0';
这会导致缓冲区溢出吗?感谢?
答案 0 :(得分:1)
很多问题。首先,为什么要转换为char *
,当数组衰减时?其次,您需要使用从零开始的索引,而不是基于一个索引;数组a
的第一个元素是a[0]
而不是a[1]
。
此外,您应该将缓冲区大小设置为6而不是5,以便为终结符
腾出空间答案 1 :(得分:0)
然后,如果我执行以下表达式:
line[6]='\0';
这会导致缓冲区溢出吗?
是。因为lines
包含五个字符而您正在覆盖第七个字符。
comp [er]会为'lines'分配8个字节吗?
没有
它可能在lines
之后放置3个字节的填充,在这种情况下,它仍然是缓冲区溢出,因为lines
仍然是5个字节长。
答案 2 :(得分:0)
你肯定是在数组的边界之外写的,这会导致未定义的行为。结果可能是以下任何一种:
大多数平台都有对齐要求,这样在数组的末尾和内存 1 中的下一个对象之间可能会有一些未使用的字节,并且在数组的末尾写入一个或两个字节是#39;很大的问题。但这与编译器分配"额外空间"不同。对于阵列。
<小时/>