我在硬质合金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。

最佳答案

c1c2没有空终止符,strlen()需要一个空终止符(以及许多其他C字符串处理函数,例如printf("%s", c1))。只有在使用字符串文字初始化char[]时,才会隐式添加空终止符。
更改为:

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

或:
char c1[] = "\x01";
char c2[] = "\x02";

09-27 07:35