PDA

Ver la versión completa : porque no me lee bien?



kamsky
05-05-2007, 14:58
tengo este código:


#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void imprimir_prompt();
void eliminar_salto_linea(char *cad);
void leer_linea_ordenes(char *buf);

main(int argc,char *argv[])
{

char *linea;

do
{
imprimir_prompt();
leer_linea_ordenes(linea);
printf("\nlinea=&#37;s",linea);

}while(1);

}

void imprimir_prompt()
{
char *buf;

buf=getcwd(NULL,0);
printf("\npr&#225;ctica5@SSOO:%s$",buf);

}

void eliminar_salto_linea(char *cad)
{
int i;

for(i=0;i<sizeof(cad);i++)
{
if(cad[i]=='\n') cad[i]=' ';

}
}

void leer_linea_ordenes(char *buf)
{

scanf("%s",buf);printf("\nbuf=%s",buf);
eliminar_salto_linea(buf);

}


que de momento imprime un prompt, y espra a que le metas las instrucciones, una vez hecho esto, te lee la linea de ordenes y se supone que te borra los saltos de linea, pero no lo hace bien, por que si le metes una cadena, un espacio y otra cadena, como que te lo lee en 2 pasadas..y no se xk???

kania
05-05-2007, 15:56
Cambia

printf("\nlinea=&#37;s",linea);

a

printf("\nlinea=%p",linea);

Cambiando esa l&#237;nea no te ir&#225; pero ver&#225;s que l&#237;nea apunta a NULL, entonces tienes dos opciones, pasar l&#237;nea por referencia, o hacer que pasar l&#237;nea devuelva un char * c&#243;mo valor de retorno.

Y reza tres avemarias y un padrenuestro a ver si resulta.

kamsky
05-05-2007, 16:07
y como paso linea por referencia? si ya es un puntero, pues ya se pasa...no?, si fuera una var, para pasarlo por referencia se hace con &, pero como ves, uso un puntero...
de otdas formas he probado a declarar linea as&#237;: char linea[1000];
y pasarlo como te digo, con un & y el resultado es el mismo..no entiendo porque lee en tandas..cada espacio una..??

kania
05-05-2007, 20:42
Creo que el problema est&#225; en asignar memoria

prueba


char *linea;
void leer_linea_ordenes (char **pszBuf)
{
*pszBuf = (char *)malloc(...);
scanf("&#37;[^\n]", *pszBuf);
etc, etc

A ver si te va.

kamsky
06-05-2007, 12:30
muchas gracias, lo del mallo no lo hice, pero si que cambie la forma de leer y le puse un scanf(" %[^\n]", buf); y ahora tira bien :D el malloc no hace falta no?

kania
06-05-2007, 19:48
El malloc devuelve un puntero a un bloque de memoria en el stack reservado para tu aplicaci&#243;n, o m&#225;s bien, adem&#225;s de devolver el puntero, tambi&#233;n reserva ese trozo. Resumiendo, es para reservar memoria. Qu&#233; te funciona as&#237;?
Me alegro :). Siento no haberte servido de ayuda.