我在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");
}
答案 0 :(得分:3)
您只需为re
(0
到3
包含)声明4个元素,但在执行re[4]
时使用第5个元素。您正在调用此处的未定义行为。您需要将re
定义为:
char re[5];
答案 1 :(得分:0)
您正在通过为re
赋值来访问数组re[4]
的边界。
正如 Jim Buck 所说,使用char re[5]
,或使用索引3
作为数组re
的最后一个。