Неверный вывод printf - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Код
printf("%s %s\n",byte_to_binary(i), byte_to_binary(sbox1(i)));
где
const char *byte_to_binary(int)
получается: byte_to_binary(i) return "0000" byte_to_binary(sbox1(i)) return "0101" Почему на экран выводит только "0000 0000" ??? Видимо я чего то не знаю...

Решение задачи: «Неверный вывод printf»

textual
Листинг программы
const char *byte_to_binary(int x)
{
    int i;
 
    static char b[4];
    b[0] = '\0';    
    for (i = 8; i > 0; i >>= 1)
        strcat(b, ((x & i) == i) ? "1" : "0");
    return b;
};
int sbox1(int x)
{
    int sbox1[2][8]={
// 000 001 010 011 100 101 110 111
{   5,  2,  5,  3,  1,  6,  7,  1}, //0
{   7,  4,  4,  2,  3,  5,  6,  3}  //1
    };
    return sbox1[x>>3&0x1][x&0x7];
};
int main()
{
        i=0;
        printf("%s %s \n",byte_to_binary(i), byte_to_binary(sbox1(i)));
        return 0;
}

Объяснение кода листинга программы

  1. В функции byte_to_binary происходит преобразование целого числа в двоичное представление и возвращается указатель на строку.
  2. В функции sbox1 происходит использование S-box (подстановочная таблица) для замены части двоичного представления числа на другое число.
  3. В функции main создается переменная i со значением 0 и выводится двоичное представление числа 0 и результат применения S-box к этому числу.
  4. В данном коде возможно неверное использование функции printf для вывода строки и указателя на строку, так как требуется использовать функцию printf с форматом %s для вывода указателя на строку.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5