Как вы напечатаете любой символ, строку или значение переменной без библиотечных функций в C?

StackOverflow https://stackoverflow.com/questions/468262

Вопрос

Если, например, мне не следует использовать стандартные библиотечные функции, такие как printf, putchar, то как я могу легко вывести символ на экран?Есть ли простой способ сделать это.Я мало что знаю о системных вызовах, и если мне придется их использовать, то как?

Так может ли кто-нибудь посоветовать простой способ печати без использования библиотечных функций??

Это было полезно?

Решение 3

Хорошо, спасибо всем за ваши ответы. Я нашел один простой ответ в виде комментария от г-на Хао под вопросом. его ответ проста программа вроде этой

Turbo C (программа DOS):

char far* src = (char far*) 0xB8000000L; 
*src = 'M'; 
src += 2; 
*src = 'D'; 

или попробуйте это: http://en.wikipedia.org/wiki/Brainfuck :) & # 8211; // Хао (час назад)

Я попробовал это на Turbo C и он работает. Я хотел простое решение, подобное этому, и я хотел принять его как правильный ответ, но он (Хао) дал его как комментарий, поэтому я вставил его сюда, чтобы другие пользователи могли узнать об этом от его имени, и принял его. Еще раз спасибо, господин Хао.

Другие советы

В стандарте C вы не можете.Единственный ввод-вывод, определенный в C, осуществляется через функции стандартной библиотеки C.

На данной платформе могут быть способы сделать это:

  • Выполняйте вызовы ядра напрямую.Для этого вам, вероятно, понадобится написать какой-нибудь встроенный ассемблер.Вы могли бы сделать литб write позвоните напрямую, без использования библиотеки C.Возьмите исходный код вашей библиотеки C, чтобы посмотреть, как это делается.
  • Запись непосредственно в буфер кадра.Многопользовательские ОС часто запрещают это (по крайней мере, без каких-либо вызовов библиотеки/ядра).

Если вы не пишете свою собственную библиотеку C, я не уверен, зачем вам это нужно.

В Linux вы можете использовать системный вызов write:

write(1, "hello\n", 6); // write hello\n to stdout

Если вам не хватает этого, вы можете пойти на один шаг ниже, вызывая системный вызов в общем:

syscall(__NR_write, 1, "hello\n", 6);

Стоит знать о strace, который вы можете использовать, чтобы узнать, какие системные вызовы используются какой-либо конкретной программой во время ее работы. Но обратите внимание, что для & Quot; некоторого простого парсера & Quot; вряд ли нужно использовать необработанные системные вызовы. Лучше использовать функции библиотеки c.

Кстати, обратите внимание на функции WriteFile и GetStdHandle, если вы хотите сделать это в Windows без использования стандартной библиотеки c. Хотя это будет не так много, как решение для Linux.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top