无限循环 - 发生了什么?

时间:2013-09-11 09:13:07

标签: c

我在C中有以下代码,它应该返回8位长数字串中每个数字的4位二进制表示。由于某种原因,它现在无限循环。

当前输出看起来像这样(输入12345677):0001 0010 0011 0000 0000 0000 0000 0000 0000 ...(无穷无尽的零)。你可以看到前3个数字有效(我认为这很奇怪)。

这里出了什么问题?

    #include<stdio.h>
    #include<stdlib.h>

    #define LENGTH 8

    int main()
    {
        char number[LENGTH];

        printf("Geef nummers in : ");
        scanf("%s", number);   

        printf("Resultaat : ");

        for(int i=0; i<LENGTH; i++) {

          char re[4];

          re[3] = ((number[i]) & 1) ? '1' : '0';
          number[i] >>= 1;
          re[2] = ((number[i]) & 1) ? '1' : '0';
          number[i] >>= 1;
          re[1] = ((number[i]) & 1) ? '1' : '0';
          number[i] >>= 1;
          re[0] = ((number[i]) & 1) ? '1' : '0';
          number[i] >>= 1;
          re[4] = '\0';

          int res = atoi(re);
          printf("%04d ", res);

        }  

        printf("\n");
    }

2 个答案:

答案 0 :(得分:3)

您只需为re03包含)声明4个元素,但在执行re[4]时使用第5个元素。您正在调用此处的未定义行为。您需要将re定义为:

char re[5];

答案 1 :(得分:0)

您正在通过为re赋值来访问数组re[4]的边界。

正如 Jim Buck 所说,使用char re[5],或使用索引3作为数组re的最后一个。