Foros del Web » Programación para mayores de 30 ;) » C/C++ »

leer palabras desde un archivo a un arreglo de caracteres

Estas en el tema de leer palabras desde un archivo a un arreglo de caracteres en el foro de C/C++ en Foros del Web. hola.. el problema es que al parecer mi programa guarda la ultima palabra leida en todas las posiciones del arreglo... Aqui esta el codigo.. cualquier ...
  #1 (permalink)  
Antiguo 04/05/2008, 16:45
 
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 16 años
Puntos: 0
leer palabras desde un archivo a un arreglo de caracteres

hola.. el problema es que al parecer mi programa guarda la ultima palabra leida en todas las posiciones del arreglo...

Aqui esta el codigo.. cualquier ayuda, comentario, sugerencia es bienvenida..
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define TAMANO 20
int cont=0;
void leerArchivo(){
int i;
for(i=0;i<TAMANO;i++){
ejecutar[i]=(char*)malloc(sizeof(char*));
}
char *comando=(char*)malloc(sizeof(char*));
if(stdin!=NULL){
while(!feof(stdin)){
fscanf(stdin,"%s",comando);
ejecutar[cont]=comando;
//aqui imprime la palabra supuestamente almacenada
printf("%s ", ejecutar[cont]);
cont++;
}

}
//imprime el contenido del arreglo
for(i=0;i<cont;i++){
printf("%s ", ejecutar[i]);//
}
}


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

leerArchivo();

return 0;
}

LO QUE IMPRIME ESTO ES
CREATE DATABASE alumnos; CREATE TABLE alumno;
alumno; alumno; alumno; alumno; alumno; alumno;


desde ya se agradece cualquier ayuda ya que de esto depende el avance de mi proyecto...
  #2 (permalink)  
Antiguo 04/05/2008, 17:01
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
Antigüedad: 16 años, 1 mes
Puntos: 4
Re: leer palabras desde un archivo a un arreglo de caracteres

No se cuantas cosas tienes mal, pero la reserva de memoria no esta bien.
Estas reservando únicamente sitio para 4 bytes (u 8, depende del modelo de memoria), ya que tienes puesto: "sizeof(char*)".
Necesitarás más para la mayoria de los contenidos de "comando".
Supongo que la variable "ejecutar" es un array de punteros.
Puedes cambiarlo como un array de buffers de tamaño fijo, o seguir como vas (con memoria dinámica), pero haciendo el malloc con tamaños mayores, por ejemplo 300 bytes "a capón".
  #3 (permalink)  
Antiguo 04/05/2008, 18:04
 
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 16 años
Puntos: 0
Re: leer palabras desde un archivo a un arreglo de caracteres

gracias... de todas formas despues de aplicar la sugerencia sigo obteniendo el mismo resultado al ejecutar el programa... voy a investigar acerca de los arrays de buffers de tamaño fijo. Si puedes ayudarme con eso también sería bueno.. gracias una vez mas..
  #4 (permalink)  
Antiguo 05/05/2008, 00:14
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
Antigüedad: 16 años, 1 mes
Puntos: 4
Re: leer palabras desde un archivo a un arreglo de caracteres

Bueno ya que preguntas, en realidad un array de buffers de tamaño fijo es una solución un poco chapuza ya que desperdicia memoria.
Es mejor que tengas una variable grande para los scanf, y que luego reserves la memoria que necesites con malloc.

Ejemplo:

Código:
...
char comando[1024];
char * ejecutar[TAMANO];

for(i=0;i<TAMANO;i++)
{
  fscanf( stdin,"%s", comando ); 
  ejecutar[i] = (char*)malloc( strlen(comando)+1 );
  strcpy( ejecutar[i] , comando );
  ...
}
  #5 (permalink)  
Antiguo 05/05/2008, 14:52
 
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 16 años
Puntos: 0
Re: leer palabras desde un archivo a un arreglo de caracteres

Definitivamente el problema estaba en reservar adecuadamente memoria... esa funcion ha dejado de ser un problema... gracias!!! Ahora voy a dedicarme a hacer funciones que evaluen cada palabra... hasta pronto!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:48.