#c #operating-system #hex #printf
#c #операционная система #шестнадцатеричный #printf
Вопрос:
Во время ознакомления с курсом по операционным системам, который я прохожу, я наткнулся на этот код, и у меня возникли проблемы с пониманием второй части print (%s — amp;i).
unsigned int i = 0x00646c72;
printf("H%x Wo%s", 57616, amp;i);
Это приводит к выводу:
He110 World
Первая часть — это просто шестнадцатеричное представление числа, как i
бы получился адрес 'rld'
?
Комментарии:
1. (57616)16 = E110, это объясняет He110
Ответ №1:
Адрес в конечном итоге не был ‘rld’.
Это работает, потому что %s ожидает указатель на char (указывающий на строку char, заканчивающуюся нулем). И потому, что amp;i указывает на i, который является байтами 0x72, 0x6C, 0x64, 0x00 . Которая представляет собой строку символов ascii с нулевым завершением ‘r’, ‘l’, ‘d’.