在数组值中显示额外数据

时间:2012-08-08 07:52:14

标签: c arrays char symbian carbide

我在硬件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。

2 个答案:

答案 0 :(得分:3)

c1c2没有空终止符,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)取代; 并且你得到了字符串的全长,直到空字符。

我认为这是足够的解释。