CUESTIÓN

¿Qué falla en el siguiente código? read sólo me lee 4 caracteres:
char *buffer;
[...]
buffer=malloc(256);
[...]
read(0,buffer,sizeof(buffer)); 


SOLUCIÓN

sizeof en el read está devolviendo lo que ocupa en memoria la variable buffer que, al ser un puntero, ocupa en tejo cuatro bytes. No existe una manera estándar de saber el espacio de memoria dinámica que hemos reservado al que apunta un puntero. Se podría hacer algo del estilo a esto:
char *buffer;
int tambuffer=256;
[...]
buffer=malloc(tambuffer);
[...]
read(0,buffer,tambuffer); 
Si reserváis la memoria de modo estático, sí podéis usar sizeof para saber el tamaño del array:
char buffer[256];
[...]
read(0,buffer,sizeof(buffer)); 

© 2000 Guillermo González Talaván.