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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas con array (unidimencional) de caracteres [C++]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con array (unidimencional) de caracteres [C++]  (Leído 4,301 veces)
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Problemas con array (unidimencional) de caracteres [C++]
« en: 19 Mayo 2010, 20:58 pm »

Wenas...

Andaba viendo el post "Asignar memoria dinamica..." blablabla... Y pes yo crei ya sabia de memoria dinamica pero pes cuando trate de hacer el problema yo, en C++ no me da los resultados esperados... Lo que quiero hacer, es que el usuario ingresa una palabra y si es diferente de "adios" (tengo problemas con eso, asi que lo puse a que ingrese 4 palabras9 se guarde en un array dinamico, eso es todo... El problema es que nada mas me atrapa la ultima de las palabras las demas no... Y aunque lo hice con la clase string, ya que es mas facil xD lo quiero hacer con char* pes para aprender de los errores  :xD Aca esta el code:
EDITO: el codigo un poco optimizado
Código
  1.    char aux[20],*cad,*tem;
  2.    for (int a=0;a < 4;a++){
  3.        cin.getline(aux,20);
  4.        tem=new char [strlen(cad)];
  5.        strcpy(tem,cad);
  6.        delete[] cad;
  7.        cad= new char [strlen(tem)+strlen(aux)];
  8.        strcpy(cad,tem);
  9.        strcpy(cad,aux);
  10.        delete[] tem;
  11.    }
  12.    cout<<cad<<endl;
  13.  
  14.    delete[] cad;

Creo que el problema es con strcpy(tem,cad) o cuando asigno memoria con new pes se borra el contenido, pero no estoy seguro de cual es el problema asi que acudo a ustedes...

Saludos...


« Última modificación: 19 Mayo 2010, 23:43 pm por El_nuevo_HH » En línea

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



.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Problemas con array (unidimencional) de caracteres [C++]
« Respuesta #1 en: 20 Mayo 2010, 00:28 am »

:D Listo resolvi por otro lado... Pongo el code pes por si alguien le sirve...

EDITO: El codigo tienen un problemita, lo estoy resolviendo... No lo uses por ahora  :xD
Código
  1. char aux[20],*cad,*tem;
  2.    cad=new char [1]();/* No se muy bien que pasa aca, me imagino que se llama un constructor algo asi,
  3. me dijeron que crea una cadena vacia pero si no agrego la linea que sigue no funciona el programa...*/
  4.    strcpy(cad,"");
  5.    for (int a=0;a < 4;a++){
  6.        cin.getline(aux,20);
  7.        tem=new char [strlen(cad)];
  8.        strcpy(tem,cad);
  9.        delete[] cad;
  10.        cad= new char [strlen(tem)+strlen(aux)];
  11.        strcpy(cad,tem);
  12.        strcat(cad,aux);
  13.        delete[] tem;
  14.    }
  15.    cout<<cad<<endl;
  16.  
  17.    delete[] cad;

Saludos...


« Última modificación: 20 Mayo 2010, 01:25 am por El_nuevo_HH » En línea

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



Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Problemas con array (unidimencional) de caracteres [C++]
« Respuesta #2 en: 20 Mayo 2010, 07:40 am »

Me sorprende que no entiendas porque necesitas reservar memoria primero para cad. En el primer código que pusiste, adonde apunta cad? cual es la longitud que devuelve strlen? cual es el contenido de cad? si te planteas esas preguntas entenderás porque cad necesita ser mas que un puntero que apunta a cualquier parte.

En cualquiera de los casos la mejor opción es usar un contenedor apropiado, podes usar allocators, pero a la larga harías algo similar a un contenedor pero con mas probabilidades de error.

También podes recurrir a las malas practicas y usar realloc y su familia, pero obviamente ese tipo de funciones no son muy amigas de los objetos al desconocer conceptos básicos como los constructores. Pero en fin, como poder, podrías usarlas siempre y cuando no mezcles new/delete con malloc/realloc/free.

Saludos!
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Problemas con array (unidimencional) de caracteres [C++]
« Respuesta #3 en: 20 Mayo 2010, 17:08 pm »

El problema no es que no sabia que debia reservar espacio... Si no que los parentesis no los habia visto... nada mas con punteros a funciones, pero obviamente no de esa forma...

Y a la final que me estas diciendo? xD que utilize las funciones de C en vez de los operadores de C++?...

En cualquiera de los casos la mejor opción es usar un contenedor apropiado, podes usar allocators, pero a la larga harías algo similar a un contenedor pero con mas probabilidades de error.

allocators? Eso no es de C? 0o?? dejame estudiar sobre eso... pero en la noche porque voy saliendo  :-\

PD: Las preguntas si me las pueden aclarar horita  :xD

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



Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Problemas con array (unidimencional) de caracteres [C++]
« Respuesta #4 en: 20 Mayo 2010, 22:09 pm »

No, si te fijas en el post queda demasiado claro que una cosa no tiene nada que ver con la otra.

realloc y toda su familia puede utilizarse, pero como te dije antes, no seria lo ideal y mucho menos cuando tratamos con objetos. Lo ideal seria usar un contenedor apropiado.

Ahora bien, respecto de los contenedores (vector por ejemplo) supongo que alguna vez te habrás preguntado como implementan el manejo de memoria dinámica, y es ahí donde entran los allocators. A grandes rasgos es una interfaz común para que los distintos tipos de contenedores no tengan que preocuparse específicamente sobre el manejo de memoria dentro de su implementación.
Para mas información sobre eso busca sobre allocators -STL-.

Saludos!
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Problemas con array (unidimencional) de caracteres [C++]
« Respuesta #5 en: 20 Mayo 2010, 23:11 pm »

Okas, voy a leer sobre eso. Ya termine el code (ayudado)... El problema era que no le di espacio al puntero para los caracteres nulos ('\0')...Aca ta el code:

Código
  1.    char aux[20],*cad,*tem;
  2.    cad=new char [1]();
  3.    strcpy(cad,"");
  4.    for (int i=0;i<4;i++){
  5.        cin.getline(aux,20);
  6.        tem=new char [strlen(cad)+1];
  7.        strcpy(tem,cad);
  8.        delete[] cad;
  9.        cad= new char [strlen(tem)+strlen(aux)+1];
  10.        strcpy(cad,tem);
  11.        strcat(cad,aux);
  12.        delete[] tem;
  13.    }
  14.    cout<<cad<<endl;
  15.  
  16.    delete[] cad;

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



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOURCE] CharSplit7913 Separa un string en un array de caracteres.
Programación Visual Basic
79137913 4 5,584 Último mensaje 17 Marzo 2011, 19:50 pm
por 79137913
problemas con array multidimencional
PHP
Zeroql 7 4,274 Último mensaje 1 Julio 2011, 00:03 am
por Zeroql
[C] Funcion regresa array de caracteres
Programación C/C++
edr89 3 2,767 Último mensaje 9 Octubre 2013, 08:53 am
por eferion
Problemas con array muy grande y el Windows7
Programación Visual Basic
OfTheVara 1 1,617 Último mensaje 23 Octubre 2015, 02:08 am
por Lekim
Crear un array de caracteres mediante una funcion.
Programación C/C++
euroesp 6 3,572 Último mensaje 28 Julio 2016, 19:37 pm
por euroesp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines