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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con Malloc y cadenas de tamaño variable.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con Malloc y cadenas de tamaño variable.  (Leído 10,689 veces)
Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Problema con Malloc y cadenas de tamaño variable.
« Respuesta #10 en: 22 Noviembre 2010, 19:54 pm »

Pseucode:

1. Pedir cadena =  char *tmp, fgets (...)
2. Calcular tamaño = strlen ()
3. Reservar memoria = malloc
4. Borrar tmp [x ejemplo metiendo paso 1 en funcion aparte....


Algo asi???


En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


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


Ver Perfil WWW
Re: Problema con Malloc y cadenas de tamaño variable.
« Respuesta #11 en: 22 Noviembre 2010, 22:10 pm »

¿Y a char *tmp que tamaño le damos? Estamos en la misma y usando memoria dinamica dos veces para nada ...

Yo lo haria mas o menos asi:

Código
  1. void getString(char **pstr)
  2. {
  3.  char tmp[16384];
  4.  fgets(tmp, sizeof(tmp), stdin);
  5.  *pstr = (char*)malloc(strlen(tmp) + 1);
  6.  strcpy(*pstr, tmp);
  7. }

Primero reservas memoria para los punteros y despues con un bucle llamas a esta funcion pasandole la direccion de cada elemento del array de punteros a char.


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
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problema con Malloc y cadenas de tamaño variable.
« Respuesta #12 en: 23 Noviembre 2010, 01:58 am »

¡Buenas!

Tambien puedes asignar la memoria seguna vayas leyendo caracteres:

Código
  1. int main(int argc, char *argv[])
  2. {
  3.    char *cadenas[N_CADENAS],lector;
  4.    int i,ncaracteres;
  5.  
  6.    for(i = 0 ; i < N_CADENAS ; i++)
  7.    {
  8.        cadenas[i] = NULL;
  9.        ncaracteres = 0;
  10.  
  11.        while((lector = getchar() != '\n')
  12.        {
  13.            cadenas[i] = (char*) realloc(cadenas[i] , (ncaracteres + 2) sizeof(char));
  14.  
  15.            cadenas[ncaracteres] = lector;
  16.            cadenas[ncaracteres + 1] = '\0';
  17.  
  18.            ncaracteres++;
  19.        }
  20.    }
  21. }
  22.  

Eso si, este codigo puede dar errores si no se consigue asignar la memoria, corrige eso y listo.

¡Saludos!

PD: Es codigo lo he puesto mientras lo pensaba, asi que puede tener errores. Si los hay, no creo que sean dificiles de detectar y corregir.
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Problema con Malloc y cadenas de tamaño variable.
« Respuesta #13 en: 25 Noviembre 2010, 01:06 am »

Muchas gracias por todas las respuestas, siento no haber podido contestar antes, he estado de exámenes y he tenido problemas con el ISP de internet y por eso no lo hice antes, ya por suerte se ha arreglado todo.

Tu idea de la variable temporal la tendré muy en cuenta, realmente si pongo un numero muy grande no creo que una cadena llegue a tener mas de ese numero y luego con realloc podría disminuirla a lo que ocupa la cadena.

Una pregunta, la idea de leer carácter por carácter es mas lento que el algoritmo propuesto por Eternal Idol de la variable temporal?

Y una ultima cosa, realmente la cadena en C no se almacena hasta que se pulsa enter, ¿no hay una forma de que cuando pulse enter todo lo que este en studin o en la entrada de datos que internamente el sistema operativo administra sacar los caracteres que han sido leídos en esa entrada y con ese tamaño darle el valor a la cadena?

Un saludo y gracias de nuevo.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al concatenar cadenas
PHP
Feedeex 4 4,858 Último mensaje 13 Mayo 2011, 12:49 pm
por Feedeex
Duda, problema de asignacion con Malloc
Programación C/C++
Fabi0lo 6 3,226 Último mensaje 25 Noviembre 2012, 18:31 pm
por 0xDani
Ayuda leer cadenas y guardarlas en una sola variable
Programación C/C++
rulax01 3 2,390 Último mensaje 21 Noviembre 2014, 00:49 am
por zShackra
Migrar funcion de C a C# problema con tamaño de variable 16 y 32 bits
Programación General
AlbertoBSD 2 2,430 Último mensaje 21 Marzo 2018, 22:59 pm
por AlbertoBSD
Variable de tamaño dinámico?
Programación C/C++
huchoko 4 2,479 Último mensaje 6 Julio 2019, 08:19 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines