【问题标题】:showing extra data in array values在数组值中显示额外数据
【发布时间】:2012-08-08 07:52:13
【问题描述】:

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

【问题讨论】:

    标签: c arrays char symbian carbide


    【解决方案1】:

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

    更改为:

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

    或:

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

    【讨论】:

      【解决方案2】:

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

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

      我认为这已经足够解释了。

      【讨论】:

        猜你喜欢
        • 2014-08-17
        • 2014-08-07
        • 2023-03-15
        • 2020-08-27
        • 2020-04-10
        • 2019-06-22
        • 2016-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多