0

我在碳化物 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。

4

2 回答 2

3

c1并且c2没有空终止符,并且strlen()需要空终止符(以及许多其他 C 字符串处理函数,printf("%s", c1)例如)。只有在使用字符串文字初始化char[].

更改为:

char c1[] = { 0x01, 0x00 };
char c2[] = { 0x02, 0x00 };

或者:

char c1[] = "\x01";
char c2[] = "\x02";
于 2012-08-08T07:55:11.740 回答
1

Array 创建了一种特殊类型的常量指针。如果您将其声明为 char,则最后添加一个空字符。实际上,您的 c[0] 语句已替换为 *(c+0); 并获取地址 c。

strlen(c[0]) 被 strlen(c) 替换;你得到了完整长度的字符串,直到空字符。

我认为这是足够的解释。

于 2012-08-08T09:40:23.843 回答