Я думаю, что МАКСИМАЛЬНЫЙ размер строки должен быть либо 10, либо 18, а не 24. (Если вы уже проверили int
на своем компьютере и следовали приведенным ниже рассуждениям, было бы полезно включить его в качестве комментария в вашем коде.)
10: поскольку htoi()
возвращает int
, int обычно составляет 4 байта (проверьте и вашу систему), поэтому шестнадцатеричное число может быть длиной не более 8 цифр (от 4 бит до 1 шестнадцатеричной цифры, 8 бит до байта ), и мы хотим учесть необязательный 0x
или 0X
.
18: было бы лучше, если бы htoi()
вернул long
и его 8 байтов (опять же, проверьте вашу систему), так что шестнадцатеричное число может быть длиной не более 16 цифр, и мы хотим включить необязательный 0x
или 0X
.
Обратите внимание, что размеры int
и long
зависят от машины, и, пожалуйста, посмотрите упражнение 2.1 в книге K & R, чтобы найти их.