¿Cómo imprimirá cualquier carácter, cadena o valor de una variable sin funciones de biblioteca en C?

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

Pregunta

Si, por ejemplo, no debo usar funciones de biblioteca estándar como printf, putchar, ¿cómo puedo imprimir un personaje en la pantalla fácilmente? ¿Hay alguna manera fácil de hacerlo? No sé mucho sobre las llamadas al sistema y si tengo que usarlas, ¿cómo?

Entonces, ¿alguien puede aconsejar una manera fácil de imprimir sin usar las funciones de la biblioteca?

¿Fue útil?

Solución 3

Bueno, gracias a todos por sus respuestas. Encontré una respuesta simple con un comentario del Sr. Hao debajo de la pregunta. su respuesta es un programa simple como este

Turbo C (programa DOS):

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

o intente esto: http://en.wikipedia.org/wiki/Brainfuck :) & # 8211; // Hao (hace una hora)

Lo probé en Turbo C y está funcionando. Quería una solución simple como esta y quería aceptarla como respuesta correcta, pero él (Hao) la dio como comentario, así que la pegué aquí para que otros usuarios la conocieran en su nombre y la acepté. Una vez más, gracias Sr.Hao.

Otros consejos

En el estándar C, no puedes. La única E / S definida en C es a través de las funciones de biblioteca estándar de C.

En una plataforma determinada, puede haber formas de hacerlo:

  • Hacer llamadas al kernel directamente. Probablemente necesitará escribir un ensamblaje en línea para hacer esto. Puede realizar la llamada write de litb directamente, sin usar su biblioteca C. Tome la fuente de su biblioteca C para ver cómo se hace.
  • Escribir directamente en el búfer de trama. Los sistemas operativos multiusuario a menudo no permiten esto (al menos sin hacer llamadas a la biblioteca / kernel).

A menos que esté escribiendo su propia biblioteca C, no estoy seguro de por qué querría hacer esto.

En Linux, puede usar la llamada al sistema write :

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

Si no puede obtener suficiente, puede ir un paso más abajo, invocando la llamada al sistema genéricamente:

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

Vale la pena saber sobre strace , que puede usar para ver qué syscalls son utilizadas por cualquier programa en particular mientras se ejecuta. Pero tenga en cuenta que para "un analizador simple", apenas es necesario usar llamadas de sistema sin procesar. Mejor usar las funciones de la biblioteca c.

Por cierto, busque las funciones WriteFile y GetStdHandle si desea hacer lo anterior en Windows sin usar la biblioteca estándar c. Sin embargo, no será tan l33t como la solución de Linux.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top