Правильный ввод пользователя - сборка Linux x86 - PullRequest
3 голосов
/ 23 октября 2011

Итак, я работаю над сборкой x86 для Linux с использованием NASM.Эта программа в основном спрашивает пользователя его имя и его любимый цвет.После этого и сохранения двух строк в переменных, объявленных в разделе .bss, программа выводит: «Ни в коем случае имя пользователя , любимый цвет тоже мой любимый цвет!

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

Код для того, что я делаю, приведен выше. У кого-нибудь есть хороший метод для определения длины введенной строки или для получения символа за раз, чтобы узнать длину строки?

Спасибо заранее.

1 Ответ

1 голос
/ 23 октября 2011

После возврата int80 in getname, EAX будет содержать количество фактически прочитанных байтов или отрицательное сообщение об ошибке.

Вы должны

  1. проверка на возврат ошибки
  2. сохранить возвращаемое значение, так как оно дает вам длину ввода

Эквивалентный код в C:

char name[20];
int rc;

rc = syscall(SYS_read, 0, name, 20-1);  // leave space for terminating NUL
if (rc < 0) {
  // handle error
} else {
  name[rc] = '\0';                      // NUL terminate the string
}
...