字符串如何在c的内存中表示

时间:2012-06-21 00:42:41

标签: c string pointers klocwork

char imei_temp[14] = {0, };

strcpy(imei_temp, "00000000000000");

根据我的理解,这是有效的代码。

但是Klocwork说的是缓冲区溢出,' imei_temp'的数组索引。可能是出界的。数组' imei_temp'大小为14的可以使用索引值0..14

2 个答案:

答案 0 :(得分:13)

这是一个缓冲区溢出,因为你的缓冲区是14个字节,但你写的是15个字节:14个ascii“0”,最后是一个空字节。

答案 1 :(得分:3)

当您使用"指定字符串时,它会在字符串末尾添加隐式\0,您尝试将15个字节复制到14字节缓冲区。

请注意,使用'指定字符时不会发生这种情况。