elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Definición de stdin en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Definición de stdin en C  (Leído 574 veces)
fafafa01

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Definición de stdin en C
« en: 5 Septiembre 2017, 11:59 »

Es legal definir stdin como sigue:

Código
  1. #define stdin (&_iob[0])

Donde _iob es un arreglo de estructura tipo FILE.

¿Despues yo podria hacer esto? ¿Por que?

Código
  1. stdin->flag

y entrar a la variable flag de la estructura FILE
¿Se pueden usar el operador de desreferencia sobre una dirección de memoria?

o debria definir a stdin asi:

Código
  1. #define stdin (_iob)


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.201


ASMático


Ver Perfil WWW
Re: Definición de stdin en C
« Respuesta #1 en: 5 Septiembre 2017, 15:16 »

El operador desreferencia es precisamente para acceder a lo apuntado por una dirección de memoria. ¿Por qué no ibas a poder?

De todos modos, evita acceder a los campos de la estructura FILE, puedes hacer las operaciones con las funciones que la librería trae consigo.


En línea

AlbertoBSD
💻🌎🌍🌏🌐 NWO📱
Colaborador
***
Desconectado Desconectado

Mensajes: 3.088


Libertad!!!!!


Ver Perfil WWW
Re: Definición de stdin en C
« Respuesta #2 en: 5 Septiembre 2017, 16:44 »

De poderse de puede hacer pero como te comentan es mejor usar las definiciones que ya tienen las librerias.

La clausula define es solo para el compilador y sustituye cada occurencia del primer parametro por el segundo en el codigo fuente antes de compilarlo ejemplo:

Código
  1. #include<stdio.h>
  2.  
  3. #define _ printf
  4.  
  5. int main() {
  6. _("Hello World\n");
  7. return 0;
  8. }

Sustituye en el codigo cada _ por printf

En tu caso sustituiria cada stdin por la definicion que muestras.

Saludos!
En línea

Crackeame si puedes Wallet.dat
fafafa01

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: Definición de stdin en C
« Respuesta #3 en: 6 Septiembre 2017, 12:12 »

El operador de desreferencia sirve para acceder a lo apuntado por una dirección de memoria. El problema es que esa dirección de memoria no apunta a nada, esa dirección de memoria es una estructura tipo FILE no un puntero. ( O ESO ES LO QUE ENTIENDO).
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.201


ASMático


Ver Perfil WWW
Re: Definición de stdin en C
« Respuesta #4 en: 6 Septiembre 2017, 20:19 »

El operador de desreferencia sirve para acceder a lo apuntado por una dirección de memoria. El problema es que esa dirección de memoria no apunta a nada, esa dirección de memoria es una estructura tipo FILE no un puntero. ( O ESO ES LO QUE ENTIENDO).
_iob es una matriz de FILE, que contiene varios FILE. Aunque sea un array, se puede acceder a él como si fuera un puntero. Hay pequeñas diferencias entre array y puntero, pero bueno, parecidos.
En línea

fafafa01

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: Definición de stdin en C
« Respuesta #5 en: 6 Septiembre 2017, 22:16 »

Claro pero para mi se tendría que definir así:

Código
  1. #define stdin (_iob)

En este caso al aplicarle el operador de desreferencia:
Código
  1. *(_iob)

estarías accediendo al primer elemento del arreglo:

Código
  1. (_iob[0])

en el otro caso:

Código
  1. #define stdin (&_iob[0])

este codigo es equivalente a este otro:

Código
  1. #define stdin (&*(_iob+0))
al aplicar el operador de desregerencia:
Código
  1. * (&*(_iob+0))
Le estarias aplicando el operador de desreferencia a la direccion de memoria del primer elemento de la  estructura FILE.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.201


ASMático


Ver Perfil WWW
Re: Definición de stdin en C
« Respuesta #6 en: 6 Septiembre 2017, 22:23 »

Código
  1. #define stdin (&*(_iob+0))
Esto se desarrollaría así:
Código
  1. #define stdin (&*K) // K -> FILE[]
  2. #define stdin (&K) // K -> FILE
  3. #define stdin K // K -> FILE*

Ten en cuenta, en el último paso, que '&' es una referencia; "añade un puntero (*)".

Por tanto, stdin es un FILE.
En línea

fafafa01

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: Definición de stdin en C
« Respuesta #7 en: 9 Septiembre 2017, 21:53 »

Código
  1. #define stdin (&*(_iob+0))
Esto se desarrollaría así:
Código
  1. #define stdin (&*K) // K -> FILE[]
  2. #define stdin (&K) // K -> FILE
  3. #define stdin K // K -> FILE*

Ten en cuenta, en el último paso, que '&' es una referencia; "añade un puntero (*)".

Por tanto, stdin es un FILE.

No entiendo ¿que es esa K?

¿Como yo quiero definir stdin esta mal?
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.201


ASMático


Ver Perfil WWW
Re: Definición de stdin en C
« Respuesta #8 en: 10 Septiembre 2017, 12:39 »

Código
  1. #define stdin (&*A) // A -> FILE[]
  2. // B = *A
  3. #define stdin (&B) // B -> FILE
  4. // C = &B
  5. #define stdin C // C -> FILE*
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
fflush(stdin) « 1 2 »
Programación C/C++
Siuto 18 51,264 Último mensaje 19 Octubre 2005, 19:55
por heap
Zanjar de una vez fflush(stdin)
Programación C/C++
Eliptico 5 5,310 Último mensaje 24 Agosto 2009, 20:24
por Eternal Idol
Sber si hay datos en stdin ?
Programación C/C++
lDanny 6 1,401 Último mensaje 25 Mayo 2010, 11:39
por lDanny
[C] Limpiando la stdin correctamente...
Programación C/C++
zShackra 9 2,023 Último mensaje 12 Noviembre 2014, 20:44
por zShackra
El bendito stdin...
Programación C/C++
zShackra 4 1,268 Último mensaje 26 Noviembre 2014, 09:32
por zShackra
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines