-
porque no me lee bien?
tengo este código:
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=%s",linea);
}while(1);
}
void imprimir_prompt()
{
char *buf;
buf=getcwd(NULL,0);
printf("\nprá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???
-
Cambia
printf("\nlinea=%s",linea);
a
printf("\nlinea=%p",linea);
Cambiando esa línea no te irá pero verás que línea apunta a NULL, entonces tienes dos opciones, pasar línea por referencia, o hacer que pasar línea devuelva un char * cómo valor de retorno.
Y reza tres avemarias y un padrenuestro a ver si resulta.
-
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í: 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..??
-
Creo que el problema está en asignar memoria
prueba
char *linea;
void leer_linea_ordenes (char **pszBuf)
{
*pszBuf = (char *)malloc(...);
scanf("%[^\n]", *pszBuf);
etc, etc
A ver si te va.
-
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?
-
El malloc devuelve un puntero a un bloque de memoria en el stack reservado para tu aplicación, o más bien, además de devolver el puntero, también reserva ese trozo. Resumiendo, es para reservar memoria. Qué te funciona así?
Me alegro :). Siento no haberte servido de ayuda.