0

我在 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");
    }
4

2 回答 2

3

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

char re[5];
于 2013-09-11T09:16:37.090 回答
0

re通过将值分配给 ,您正在访问数组的边界re[4]

正如Jim Buck所说,使用char re[5]或使用 index3作为 array 的最后一个re

于 2013-09-11T09:17:11.020 回答