Задать вопрос
@Trans00
Java-разработчик

Почему я получаю 2 лишних нуля?

Пытаюсь вывести на lcd дисплей массив 8 байт, я ожидал получить "0xFF0xFF0xFF0xFF0xFF0xFF0xFF0xFF" после выполнения этой программы,

char * read_rom(){
unsigned int i;
char ch[8];
char ch1[1];
for(i=0;i<=8;i++){
temporary[i]=0xFFFF;//RX();
sprintf (ch1, "0x%X", temporary[i]);
lcd_display(ch1);
}
return temporary;
}

но в результате получаю: "0xFF000xFF000xFF000xFF000xFF000xFF000xFF000xFF00"

Объясните неумехе, почему?
  • Вопрос задан
  • 2344 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
gbg
@gbg Куратор тега Программирование
Любые ответы на любые вопросы
Два бага сразу:
Лишняя итерация цикла:
for(i=0;i<=8;i++){
i или должна быть <8 или <=7
Не использован модификатор длины:
sprintf (ch1, "0x%X", temporary[i]);
Исправление:
sprintf (ch1, "0x%2X", temporary[i]);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Neuroware
@Neuroware
Программист в свободное от работы время
temporary должен быть как byte[] и temporary[i]=0xFF;
Ответ написан
Комментировать
@DancingOnWater
Вы в 8 битовый знаковый чар впихиваете 16 беззнаковый и выводите знаковый char
Ответ написан
Комментировать
@xandox
к Армянское Радио +
ch1 объвлен как char ch1[1] - то бишь один байт, а вы в него пытаетесь аж 4 запихнуть, C вам конечно слово не скажет, но потом когда-нибудь можете сильно удивиться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы