Acceder a una matriz dentro de una estructura ?

Iniciado por d00ze13, 2 Enero 2011, 20:09 PM

0 Miembros y 1 Visitante están viendo este tema.

d00ze13

Alguien sabe como podria acceder a una matriz dentro de una estructura? os pongo un ejemplo que acabo de hacer para ver si me lo podriais comentar.
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
struct ejemplo{
       char matriz[5][5];
       };
void llenado(struct ejemplo *disco)
{
     strcpy(disco.matriz[0][1], "a"); /*Aqui es donde querria acceder, pero no me deja*/
}
int main(void)
{
    int asd;
    struct ejemplo llamada;
    llenado(llamada);
    cout<<llamada.matriz[0][1];
   
    cin>>asd;
}

Ferno

#1
Eso no compila. No estás accediendo adecuadamente a la matriz.
La variable disco es un puntero a struct ejemplo, no es la estructura en sí.
Podés acceder utilizando disco->matriz[][].

El utilizar "->" es lo mismo a utilizar (*disco).matriz[][].
Es decir, para acceder a la matriz, primero tenés que desreferenciar el puntero utilizado.

EDIT: Hay otro error. Le estás pasando a la función "llenado" un struct ejemplo, y lo que en realidad espera es un puntero a un struct ejemplo.
Entonces podés hacer dos cosas. Podes modificar el parámetro de la función, borrándole el asterisco para que no espere un puntero (y compilaría):

Código (cpp) [Seleccionar]
#include <iostream>
#include <string.h>
using namespace std;
struct ejemplo{
      char matriz[5][5];
      };
void llenado(struct ejemplo *disco)
{
    strcpy(disco->matriz[0],"a"); /*Aqui es donde querria acceder, pero no me deja*/
}
int main(void)
{
   int asd;
   struct ejemplo llamada;
   llenado(&llamada);
   cout<<llamada.matriz[0];

   cin>>asd;
}


O podés referenciar el argumento cuando llamás a la función:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
struct ejemplo{
      char matriz[5][5];
      };
void llenado(struct ejemplo *disco)
{
    strcpy(disco->matriz[0], "a"); /*Aqui es donde querria acceder, pero no me deja*/
}
int main(void)
{
   int asd;
   struct ejemplo llamada;
   llenado(&llamada);
   cout<<llamada.matriz[0];

   cin>>asd;
}

leogtz

#2
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>
using namespace std;
struct ejemplo
{
   char matriz[5][5];
};
void llenado(struct ejemplo *disco)
{
    strcpy((*disco).matriz[0], "foro.elhacker.net"); /*Aqui es donde querria acceder, pero no me deja*/
}

int main(void)
{
   struct ejemplo llamada;
   llenado(&llamada);
   cout << llamada.matriz[0];
}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

d00ze13

muchas gracias por la explicacion, pero funciona solo la ultima que me pusisteis,
lo que no entiendo es este codigo
Código (cpp) [Seleccionar]
strcpy((*disco).matriz[0], "foro.elhacker.net");
bueno si que entiendo lo que hace lo que no entiendo es porque se pone matriz[0], no deberia ser matriz[0][1]  para guardarlo en la posicion especifica esa?

leogtz

#4
No, matriz[0][1] te estás refiriendo a un solo caracter, con matriz[0] trabajas con la cadena entera. Si tu intención era solo modificar un solo caracter entonces no necesitas de strcpy() podrías modificar directamente.


Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>
using namespace std;
struct ejemplo
{
    char matriz[5][5];
};
void llenado(struct ejemplo *disco)
{
     //strcpy((*disco).matriz[0], "foro.elhacker.net"); /*Aqui es donde querria acceder, pero no me deja*/
     disco->matriz[0][1] = 'a';
     (*disco).matriz[0][1] = 'a';
}

int main(void)
{
    struct ejemplo llamada;
    llenado(&llamada);
    cout << llamada.matriz[0][1];
    return 0;
}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Garfield07



* 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