Retroceder   Foros del Web > Temas generales de computación > Programación > C/C++

Respuesta
 
Herramientas Desplegado
Antiguo 04-may-2008, 16:45   #1 (permalink)
Gabichu ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 5
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...
Gabichu está desconectado   Responder Citando
Antiguo 04-may-2008, 17:01   #2 (permalink)
a2a2 tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
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".
a2a2 está desconectado   Responder Citando
Antiguo 04-may-2008, 18:04   #3 (permalink)
Gabichu ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 5
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..
Gabichu está desconectado   Responder Citando
Antiguo 05-may-2008, 00:14   #4 (permalink)
a2a2 tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
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 );
  ...
}
a2a2 está desconectado   Responder Citando
Antiguo 05-may-2008, 14:52   #5 (permalink)
Gabichu ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 5
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!!
Gabichu está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:11.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93