unsigned char kk[16] = {129, 254, 139, 254, 135, 87, 108, 62, 203, 34, 66, 111, 142, 87, 132, 115};
unsigned char kkf[20] = {24, 165, 227, 127, 183, 90, 60, 22, 128, 165, 7, 52, 151, 238, 69, 203, 42, 213, 220, 57};
printf("strlen kk: %d\n", strlen(kk)); //should be 16
printf("strlen kkf: %d\n", strlen(kkf) //should be 20
输出
strlen kk: 16
strlen kkf: 22 //insane????????
为什么kkf [20]的长度是22?这显然是20吗?我在Linux上编译它。发生了什么?提前致谢。
答案 0 :(得分:3)
C字符串是零终止的,这意味着您需要在每个数组的末尾都有一个零字符。将代码更改为:
unsigned char kk[17] = {129, 254, 139, 254, 135, 87, 108, 62,
203, 34, 66, 111, 142, 87, 132, 115, 0};
unsigned char kkf[21] = { 24, 165, 227, 127, 183, 90, 60, 22,
128, 165, 7, 52, 151, 238, 69, 203,
42, 213, 220, 57, 0};
printf("strlen kk: %d\n", strlen(kk)); //should be 16
printf("strlen kkf: %d\n", strlen(kkf) //should be 20
对于原始代码,你很幸运得到了第一个数组,并且恰好在文字创建的最后一个元素之后有一个零字符。
分享并享受。
答案 1 :(得分:3)
strlen()会对字符进行计数,直到找到您未提供的' \ 0'为止。恰好有一个' \ 0'从kk结尾起16个字节,从kkf结尾起22个字节,但这纯粹是偶然的。