我在硬件c / c ++
中使用了c代码的这一部分 char c1[]={0x01};
char c2[]={0x02};
char* c [] = {c1,c2};
当我检查c [0],c [1]的值时...我在调试模式中看到两个这样的值
c[0] = \x01\x01 & (x) = *[0] = \x01
c[1] = \x02\x01\x01 & (x) = *[1] = \x02
如果我像这样计算长度
int cclen2 = strlen(c[0]);
获得cclen2 = 2;但我应该将值设为1。
答案 0 :(得分:3)
c1
和c2
没有空终止符,strlen()
需要空终止符(以及许多其他C字符串处理函数,例如printf("%s", c1)
)。仅当使用字符串文字初始化char[]
时,才会隐式添加空终止符。
更改为:
char c1[] = { 0x01, 0x00 };
char c2[] = { 0x02, 0x00 };
或:
char c1[] = "\x01";
char c2[] = "\x02";
答案 1 :(得分:1)
Array创建一种特殊类型的常量指针。如果你将它声明为char,那么最后会添加一个空字符。 实际上你的c [0]语句被替换为*(c + 0);并获取地址c。
strlen(c [0])被strlen(c)取代; 并且你得到了字符串的全长,直到空字符。我认为这是足够的解释。