在unsigned char []的情况下,无法在初始化程序结束时添加空终结符!

时间:2017-03-28 23:18:36

标签: c char

我有以下四行代码:

unsigned char key[] = {1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1};
unsigned char iv[] = {1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};
printf("key = %s length = %d\n",key, strlen((char *)key));
printf("iv = %s length = %d\n",iv, strlen((char *)iv));

使用初始化程序,我希望在变量key和iv的末尾附加一个NULL字符,所以我希望两者的长度都是16,但是当我编译并运行此代码时,我得到的输出为如下所示:

key =(32个二进制字符)length = 32

iv =(16个二进制字符)长度= 16

但是正如我们所看到的,iv的长度是预期的16,但是iv的长度大于16.不确定为什么在键的情况下没有添加null终止符。有人可以指出是否默认添加空终止符。

1 个答案:

答案 0 :(得分:3)

回答你的问题:这种类型的初始化不会在char数组的末尾追加NULL Terminator。例如,您可以查看lldb:

的调试输出

enter image description here

enter image description here

如前所述,strlen()正在寻找NULL终结符的位置,因为他找不到一个,他会读入未分配的内存,这是未完成的行为

相关问题