2013-09-11 4 views
0

У меня есть следующий код в C, который должен возвращать 4-битное двоичное представление каждого числа в 8-значной длинной строке чисел. По какой-то причине это происходит бесконечно.Бесконечная петля - что происходит?

Токовый выход выглядит следующим образом: (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"); 
    } 
+11

're [4] = '\ 0';' неопределенное поведение во время выполнения в вашем коде –

+0

Удаление этой линии позволило решить эту проблему. Большое спасибо. – Melvin

+0

ваш прием Мелвин :) –

ответ

3

Вы только объявить 4 элементов для re (0 через 3 включительно), но вы используете 5-й элемент при выполнении re[4]. В этот момент вы вызываете неопределенное поведение. Вам нужно определить re как:

char re[5]; 
0

Вы получаете доступ через границы массива re, назначая значение re[4].

Как сказал Джим Бак используйте char re[5], или использовать индекс 3 как последний для массива re.

+2

Поскольку вы уже видели ответ Джима Бака в то время, когда вы его разместили, это было бы было лучше в качестве комментария. – Vicky

+1

@ Vicky: Я прав, на самом деле он избил меня в ответе на несколько секунд, поэтому я просто добавил его имя для справки. –

Смежные вопросы