Autor
|
Tema: Problemas con array (unidimencional) de caracteres [C++] (Leído 4,337 veces)
|
.:BlackCoder:.
Desconectado
Mensajes: 388
Cada dia C++!!
|
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 Aca esta el code: EDITO: el codigo un poco optimizado char aux[20],*cad,*tem; for (int a=0;a < 4;a++){ cin.getline(aux,20); tem=new char [strlen(cad)]; strcpy(tem,cad); delete[] cad; cad= new char [strlen(tem)+strlen(aux)]; strcpy(cad,tem); strcpy(cad,aux); delete[] tem; } cout<<cad<<endl; 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
Mensajes: 388
Cada dia C++!!
|
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 char aux[20],*cad,*tem; cad=new char [1]();/* No se muy bien que pasa aca, me imagino que se llama un constructor algo asi, me dijeron que crea una cadena vacia pero si no agrego la linea que sigue no funciona el programa...*/ strcpy(cad,""); for (int a=0;a < 4;a++){ cin.getline(aux,20); tem=new char [strlen(cad)]; strcpy(tem,cad); delete[] cad; cad= new char [strlen(tem)+strlen(aux)]; strcpy(cad,tem); strcat(cad,aux); delete[] tem; } cout<<cad<<endl; 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
Mensajes: 2.714
Nie Dam Sie
|
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
Mensajes: 388
Cada dia C++!!
|
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 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
Mensajes: 2.714
Nie Dam Sie
|
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
Mensajes: 388
Cada dia C++!!
|
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: char aux[20],*cad,*tem; cad=new char [1](); strcpy(cad,""); for (int i=0;i<4;i++){ cin.getline(aux,20); tem=new char [strlen(cad)+1]; strcpy(tem,cad); delete[] cad; cad= new char [strlen(tem)+strlen(aux)+1]; strcpy(cad,tem); strcat(cad,aux); delete[] tem; } cout<<cad<<endl; 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
|
|
|
|
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,599
|
17 Marzo 2011, 19:50 pm
por 79137913
|
|
|
problemas con array multidimencional
PHP
|
Zeroql
|
7
|
4,292
|
1 Julio 2011, 00:03 am
por Zeroql
|
|
|
[C] Funcion regresa array de caracteres
Programación C/C++
|
edr89
|
3
|
2,795
|
9 Octubre 2013, 08:53 am
por eferion
|
|
|
Problemas con array muy grande y el Windows7
Programación Visual Basic
|
OfTheVara
|
1
|
1,626
|
23 Octubre 2015, 02:08 am
por Lekim
|
|
|
Crear un array de caracteres mediante una funcion.
Programación C/C++
|
euroesp
|
6
|
3,603
|
28 Julio 2016, 19:37 pm
por euroesp
|
|