Как написать целые числа с функцией write () в C? - PullRequest
0 голосов
/ 06 октября 2019

Я нуб на C и пытаюсь использовать функцию write() для отображения целого числа.

Вот мой код:

int n = 7;
write(1, &n, 4);

Я хочу показать 7, но программа не показывает ничего или другого странного символа, когда я устанавливаю n на большое число.

Чего мне не хватает?

Ответы [ 3 ]

1 голос
/ 06 октября 2019

Объекты типа int представлены в памяти различными битами. Подпрограмма write передает именно эти биты памяти по назначению.

Терминалы не предназначены для отображения произвольных битов памяти. Они не интерпретируют биты как int или другой объект, а затем отображают эту интерпретацию. Как правило, мы передаем символов на терминалы. Более конкретно, мы отправляем коды, которые представляют символы. Терминалы предназначены для получения этих кодов и отображения небольших картинок письма (символы, глифы, эмодзи и т. Д.).

Чтобы сделать вывод терминала «7», нам нужно отправить ему код «7». Общей системой кодирования символов является ASCII (американский стандартный код для обмена информацией). Код ASCII для «7» - 55. Итак, если вы сделаете это:

char x = 55;
write(1, &x, 1);

, то терминал отобразит «7» на своем дисплее, если используется ASCII.

Таким образом, write - это неправильная процедура, используемая для отображения значений int, которые человек может прочитать. Вместо этого вы обычно используете printf, например:

printf("%d", n);

f в printf означает formatted. Он проверяет биты, представляющие значение в n, и форматирует представленное значение в виде символов, предназначенных для чтения людьми, а затем записывает эти символы в стандартный вывод.

Если вы хотите использовать write дляДля передачи символов в терминал вы можете использовать sprintf, чтобы получить только часть форматирования printf без печатной части. Для начала этот код будет работать:

char buffer[80];                            // Make space for sprintf to work in.
int LengthUsed = sprintf(buffer, "%d", n);  // Format n in decimal.
write(1, buffer, LengthUsed);               // Write the characters.

(более сложный код адаптирует размер буфера к тому, что необходимо для sprintf.)

0 голосов
/ 06 октября 2019

Функция записи является системным вызовом. Он используется для записи содержимого буфера в объявленный вывод или в поток. Вы не должны использовать запись. Вместо этого вы должны использовать printf(" ", ...). В вашем случае:

printf("%d", n);

или

print("%d\n",n);

, если вы хотите записать его в строку и сделать конечную строку (перейти на следующую).

Длябольше информации о printf смотрите: printf

0 голосов
/ 06 октября 2019

Если вы хотите распечатать его в командной строке, используйте только printf() вместо:

int n = 7;
printf("%i",n);

Есть ли специальное намерение использовать функцию write()? Если да, пожалуйста, добавьте больше своего кода.

...