Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Almacenar y recopilar un array de strings en C++

Estas en el tema de Almacenar y recopilar un array de strings en C++ en el foro de C/C++ en Foros del Web. Hola amigos. Tengo un quebradero de cabeza del quince aquí.. Estoy haciendo un proyectillo para la uni sobre c++ y tengo una preguntilla (partiendo de ...
  #1 (permalink)  
Antiguo 02/04/2013, 05:47
 
Fecha de Ingreso: noviembre-2010
Ubicación: laudio
Mensajes: 61
Antigüedad: 13 años, 4 meses
Puntos: 1
Almacenar y recopilar un array de strings en C++

Hola amigos.

Tengo un quebradero de cabeza del quince aquí.. Estoy haciendo un proyectillo para la uni sobre c++ y tengo una preguntilla (partiendo de la base de que estoy aprendiendo c++).

En el proyecto, quiero almacenar un array de strings de este tipo, por ejemplo:

{ 1 => "hola", 2 => "adios" }

He visto que tengo varias formas de almacenar esto:

Código C++:
Ver original
  1. string recursos[100]
  2. char ** recursos
  3. vector<string> recursos

Bien, el problema es el siguiente. Tengo que almacenar ese array de strings en una estructura de datos, más concretamente, en la variable addr:

Código C++:
Ver original
  1. struct DsmData {
  2.     void *addr;
  3.     int size;
  4. };

Además, el mismo problema me surge a la hora de capturar los datos de addr.

Creo que el problema es de manejo de strings y arrays en c++, y de conversión de tipos.

Más datos. Para almacenar el array de strings en addr uso esta función cuya signatura es:

Código C++:
Ver original
  1. void DsmDriver::dsm_put(string blockId, void * content, int size) throw (DsmException) ;

Y para recoger los datos uso esta otra:

Código C++:
Ver original
  1. DsmData DsmDriver::dsm_get(string blockId) throw (DsmException);

Para recoger lo de addr, tengo que definirme una variable del tipo DsmData, luego hacer dsm_get(~~~~) y asignárselo, pero el problema es al usar el contenido de addr y luego volcarlo a otra variable..

Alguna sugerencia amigos??

Muchísimas gracias...

Última edición por russellhoff; 02/04/2013 a las 08:36 Razón: highlight
  #2 (permalink)  
Antiguo 02/04/2013, 10:51
 
Fecha de Ingreso: noviembre-2010
Ubicación: laudio
Mensajes: 61
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Almacenar y recopilar un array de strings en C++

No hay nadie que se preste a ayudarme? Por favor ...
  #3 (permalink)  
Antiguo 02/04/2013, 12:36
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Almacenar y recopilar un array de strings en C++

El objetivo de tu practica es implementar las funciones dsm_get y dsm_put o ya estan implementadas? La struct DsmData forma parte de DsmDriver? La structura DsmData es exactamente la que has colgado o es un ejemplo? Si la estructura es exactamente esa, el problema lo tienes en como asignar a un void* un puntero a otra cosa? Explicate un poco mas hombre, que seguramente alguien puede ayudarte pero no se entiende exactamente donde tienes el problema

Saludos
vosk
  #4 (permalink)  
Antiguo 02/04/2013, 13:33
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 8 meses
Puntos: 28
Respuesta: Almacenar y recopilar un array de strings en C++

No entiendo muy bien el problema que tienes...
  #5 (permalink)  
Antiguo 04/04/2013, 09:03
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 9 meses
Puntos: 127
Respuesta: Almacenar y recopilar un array de strings en C++

Realmente tendría que ser entre adivino y genio para saber qué pides. Si usas el contenido addr de un objeto dsmdata estás usando el puntero, para poder copiarlo tendrías que dereferenciar * y copiar la dereferenciación mediante el operador & en el argumento de la función que fuera. Mientras no lo hagas estarás manejando el puntero y no el dato en sí, que a bajo nivel sigue siendo un puntero a la primera dirección de memoria. La diferencia a bajo nivel entre un puntero y un dato es

Código C++:
Ver original
  1. int x = 3;
  2. int * a = &x;

Código Seudocódigo Intel:
Ver original
  1. mov [x], 0x03 //32b
  2. lea eax, [x]
  3. mov [a], eax //32b

si x fuera 34b20102, [x] es el contenido que hay en 34b20102
a sería 1242af33 y [a] el contenido que haya en 1242af33, que es 34b20102

Código RAM:
Ver original
  1. 34b20102   03 cc cc cc cc cc cc cc cc cc  
  2. ....
  3. 1242af33   02 01 b2 34 cc cc cc cc cc cc

cc es nada. La diferencia entonces entre un dato y un puntero es que el puntero hace que se almacene en una dirección de memoria otra dirección de memoria, como el segundo caso donde en 1242af33 ([a])se almacenaba 34b20102.


Espero que lo hayas entendido.

Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Última edición por dontexplain; 04/04/2013 a las 09:31

Etiquetas: c++, cast, char, conversion, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:32.