#keyboard #scanf #osdev
Вопрос:
Я работаю над простой ОС на C и пытаюсь реализовать клавиатуру без использования прерываний (да, я ленив -), однако символ*, возвращаемый функцией, содержит только одну букву (первая нажата) Он использует переменную MAX_16, которая просто равна 2^16.Я создаю свой собственный STDLIB и не имею доступа к большинству функций STDLIB.
char* scanf() {
char* ret;
for(int i = 0; i <= max_16; i ) {
ret[i] = getkey();
if(ret[i] == 'n') { return ret; }
}
}
Комментарии:
1. Он собирает нажатия клавиш с помощью inb(0x60);
Ответ №1:
ret
никогда не инициализируется, поэтому внутри цикла вы постоянно записываете данные в мусорную память. Вероятно, возникает ошибка, из-за которой приложение зависает, в результате чего больше не обрабатывается ввод.
Комментарии:
1. Так просто добавить
char* ret = new char();
?