Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   C/C++ (http://www.forosdelweb.com/f96/)
-   -   leer palabras desde un archivo a un arreglo de caracteres (http://www.forosdelweb.com/f96/leer-palabras-desde-archivo-arreglo-caracteres-582847/)

Gabichu 04/05/2008 16:45

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...

a2a2 04/05/2008 17:01

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".

Gabichu 04/05/2008 18:04

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..

a2a2 05/05/2008 00:14

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 );
  ...
}


Gabichu 05/05/2008 14:52

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... :aplauso:gracias!!! Ahora voy a dedicarme a hacer funciones que evaluen cada palabra... hasta pronto!!


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

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.