elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda asignacion de memoria dinámica palabras en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda asignacion de memoria dinámica palabras en c  (Leído 13,752 veces)
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Ayuda asignacion de memoria dinámica palabras en c
« Respuesta #10 en: 19 Mayo 2010, 04:30 am »

Ya que hablas de hacerlo en un solo puntero y sin saber la cantidad de palabras, yo lo estoy intentando con c++ y no me sale  :( Yo crei que ya entendia el tema xD, pero me toco usar un poco de variables auxiliares, y a la final no me muestra nada... Como lo harias tu??...

Saludos...


En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



nicolasblues86

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: Ayuda asignacion de memoria dinámica palabras en c
« Respuesta #11 en: 19 Mayo 2010, 04:48 am »

y una forma es como te mostré recién usando fgets y utilizando un variable auxiliar...

de ultima si tenes problemas con el nuevo codigo que estas haciendo postealo y nos fijamos porque no imprime nada


Saludos Coridiales :D
       


En línea

Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Ayuda asignacion de memoria dinámica palabras en c
« Respuesta #12 en: 19 Mayo 2010, 06:05 am »

Estoy con C++, no con C... Y aca ta el codigo... El problema es que no sale del bucle, de resto creo que funciona, pero sobrecargado de codigo  :-\:

Código
  1.    char *cad,aux[20]="",*caux;
  2.    int x=0;
  3.  
  4.    while (aux != "bye"){
  5.        x=x+strlen(aux)+1;
  6.        aux[strlen(aux)+1]=' ';
  7.        caux=cad;
  8.        cad=new char [x];
  9.        cad=caux;
  10.        int z=0;
  11.        for (int i=x-strlen(aux)-1;i<x;i++){
  12.            cad[i]=aux[z];
  13.            z++;
  14.            }
  15.        cin>>aux;
  16.    }
  17.    cout<< cad <<endl;
  18.    delete[] caux;
  19.    delete[] cad;
Bueno espero alguien me pueda ayudar... Y pes que a quien no le moleste expongan un mejor algoritmo...

Saludos...
En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda asignacion de memoria dinámica palabras en c
« Respuesta #13 en: 19 Mayo 2010, 08:12 am »

no entiendo para que haces que 'vect' sea un puntero de puntero si lo que queres hacer es reserva la cantidad justa de memoria para la cantidad de palabras ingresadas, se puede hacer que vect sea tan solo un puntero a char :

Es lo logico, un array bidimensional es un doble puntero. Mostranos en tu caso como leerias las palabras y accederias a ellas posteriormente ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
newfag

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Ayuda asignacion de memoria dinámica palabras en c
« Respuesta #14 en: 19 Mayo 2010, 08:22 am »

@nicolasblues86:
tienes razón con lo de calloc, el orden está mal puesto, pero si no supiera de antemano las palabras que voy a meter se podría usar la función  realloc para que fuera modificando el tamaño de vect.
EDIT: tal que asi


Código:
vect=(char **)calloc(1,sizeof(char*));
 do {
  printf("palabra: ");
  __fpurge(stdin);
  scanf("%s" ,aux);
  if(strcmp(aux,"fin")
    {
     vect[i]=(char*)malloc(sizeof(char)*(strlen(aux)+1));
     strcpy(vect[i],aux);
     n++;
     i++;
     vect=(char**)realloc(vect,sizeof(char*)*(n+1));
    }
}while(strcmp(aux,"fin"));

« Última modificación: 19 Mayo 2010, 12:52 pm por newfag » En línea

nicolasblues86

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: Ayuda asignacion de memoria dinámica palabras en c
« Respuesta #15 en: 19 Mayo 2010, 17:04 pm »

no entiendo para que haces que 'vect' sea un puntero de puntero si lo que queres hacer es reserva la cantidad justa de memoria para la cantidad de palabras ingresadas, se puede hacer que vect sea tan solo un puntero a char :

Es lo logico, un array bidimensional es un doble puntero. Mostranos en tu caso como leerias las palabras y accederias a ellas posteriormente ...

sigo sin entender, ya se que un array bidimensional es un doble puntero, lo que no entiendo es para que sirve en este ejercicio en particular es complicarse la vida, si con un solo array dinámico se puede hacer tranquilamente el problema no exige mas que eso, salvo que yo lo alla entendido mal  :-\ pero hasta donde se es guardar palabras o mejor dicho una cadena en una array cuyo tamaño definimos en tiempo de ejecución, por eso digo que seria mas facil usar un array de una dimencion y extenderlo tanto como sea necesario de ultima lo que se puede hacer por cada linea que se escribe una fila diferente ahí si hace falta recurrir a la  bidimensionalidad    :

Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define N 10
  6.  
  7. void entrada (char* cd[])
  8.  
  9. {
  10.  
  11. char aux[120];
  12. int j, tam;
  13.  
  14. printf ("escribe %d linea de texto \n", N );
  15. for (j = 0; j < N; j++)
  16. {
  17. fgets (aux, 120, stdin);
  18. tam = ((strlen(aux) +1) * sizeof(char)  );
  19. cd[j] =  (char*) malloc (tam);
  20. sscanf (aux, "%s", cd[j]);
  21. }
  22. }
  23.  
  24.  
  25. int main(int argc, char** argv)
  26. {
  27.  
  28. char * cad[N];
  29.  
  30. entrada (cad);
  31.  
  32.  
  33.  
  34. return 0;
  35. }
  36.  
  37.  
  38.  
  39.  







« Última modificación: 19 Mayo 2010, 18:22 pm por nicolasblues86 » En línea

Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda asignacion de memoria dinámica palabras en c
« Respuesta #16 en: 19 Mayo 2010, 18:46 pm »

Cita de: nicolasblues86
se puede hacer que vect sea tan solo un puntero a char :

Un puntero a char es lo que el tenia originalmente:
char *vect;

Vos ahora diste este ejemplo que es otra cosa:
char * cad[N];

sigo sin entender, ya se que un array bidimensional es un doble puntero, lo que no entiendo es para que sirve en este ejercicio en particular es complicarse la vida, si con un solo array dinámico se puede hacer tranquilamente el problema no exige mas que eso, salvo que yo lo alla entendido mal

En el ejemplo que das usas un array bidimensional de N punteros a caracter totalmente estatico, la solucion de newfag permite reservar la cantidad de punteros que quiera el usuario.

http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap8/cap810.htm
« Última modificación: 19 Mayo 2010, 18:48 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
nicolasblues86

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: Ayuda asignacion de memoria dinámica palabras en c
« Respuesta #17 en: 19 Mayo 2010, 19:16 pm »

obvio que estoy usando un array bidimensional, solo di ejemplo de como se podria llegar hacer usando ese método, sigo pensando que la manera mas sencilla  es con un array unimecional dinámico :

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. int main(int argc, char** argv)
  7. {
  8. char* pt;
  9. int tam;
  10. char b[120];
  11.  
  12. fgets (b, 120, stdin);
  13. tam =  ((strlen (b) + 1 ) * sizeof(char) ) ;
  14. pt = (char*) malloc (tam);
  15.  
  16. /* Apartir de aca se treta a pt como si fuese un array normal */
  17.  
  18. return 0;
  19.  
  20. }
  21.  



OJO!!! yo no digo que esta sea la manera mas optima de hacerlo, solo digo que es la mas simple obviamente estamos limitados por 120 caracteres y tenemos reservado ese espacio estatico,  se puede profundizar mucho más pero la pregunta inicial iba a esto

Saludos Cordiles  

« Última modificación: 19 Mayo 2010, 19:32 pm por nicolasblues86 » En línea

Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda asignacion de memoria dinámica palabras en c
« Respuesta #18 en: 19 Mayo 2010, 19:29 pm »

obvio que estoy usando un array bidimensional, solo di ejemplo de como se podria llegar hacer usando ese método

No entiendo muy bien para que ... eso ya lo hizo newfag ... yo te habia pedido que dieras el ejemplo de lo que vos aconsejabas hacer.

sigo pensando que la manera mas sencilla  es con un array unimecional dinámico :

/* Apartir de aca se treta a pt como si fuese un array normal */

Esa parte es la que me gustaria ver, como lees digamos 300 palabras (o lineas que es en realidad lo que se planteaba en el codigo desde el principio, con un bucle para ello) y despues podes acceder a ellas. Ese codigo por lo pronto lee una sola palabra linea.

OJO!!! yo no digo que esta sea la manera mas optima de hacerlo, solo digo que es la mas simple obviamente estamos limitados por 120 caracteres y tenemos reservado ese espacio estatico,  se puede profundizar mucho más pero la pregunta inicial iba a esto

Yo no lo entendi esa manera y mucho menos despues de leer el codigo donde no se trataba de una cadena de X tamaño sino X numero de cadenas ...
« Última modificación: 19 Mayo 2010, 19:46 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
nicolasblues86

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: Ayuda asignacion de memoria dinámica palabras en c
« Respuesta #19 en: 19 Mayo 2010, 19:48 pm »

Citar
Esa parte es la que me gustaria ver, como lees digamos 300 palabras y despues podes acceder a ellas. Ese codigo por lo pronto lee una sola palabra.


Heee?¿?¿?¿?¿?
que lee una sola palabra???... no capo! lee una cadena que es muy diferente en ella puede aver una palabra de 120 caracteres (la cual no existe) como tambien puede haber 50 palabras o 20 o una sola por eso uso fgets !!!  
 
a ver vamos por por partes aca ta el codigo:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. int main(int argc, char** argv)
  6. {
  7. char* pt;
  8. int tam;
  9. char b[120];
  10.  
  11. fgets (b, 120, stdin);
  12. tam =  ((strlen (b) + 1 ) * sizeof(char) ) ;
  13. pt = (char*) malloc (tam);
  14.  
  15. /* Apartir de aca se treta a pt como si fuese un array normal */
  16.  
  17. return 0;
  18. }
  19.  


digamos que nosotros ingresamos "hola!! a todos com andan?? espero que bien.. chau"

el codigo reserva memoria para alamacenar esa cantidad de caracteres en pt

ahora si nosotros queremos ingresar esos caracteres en pt podriamos hacer por ejemplo:

Código
  1.  
  2. strcpy(pt, b);
  3. puts (pt); //muestra en contenido de pt
  4.  
  5.  
  6.  
  7.  




EI: juntando mensajes.

Citar
buenas, tengo un problemilla, quiero hacer un programa que acepte un numero indeterminado de palabras y las imprima por pantalla(esto último solo para ver si funciona), había pensado algo así pero no va, una ayudita por favor

decime porfavor en que parte dice lo de numero indeterminado de lineas yo no lo veo
la propuesta inicial era esta que despues se haya deformado es otra cosa

Saludos!
« Última modificación: 19 Mayo 2010, 20:00 pm por Eternal Idol » En línea

Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines