Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: d00ze13 en 2 Enero 2011, 20:09 PM

Título: Acceder a una matriz dentro de una estructura ?
Publicado por: d00ze13 en 2 Enero 2011, 20:09 PM
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;
}
Título: Re: Acceder a una matriz dentro de una estructura ?
Publicado por: Ferno en 2 Enero 2011, 20:12 PM
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;
}
Título: Re: Acceder a una matriz dentro de una estructura ?
Publicado por: leogtz en 2 Enero 2011, 20:30 PM
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];
}
Título: Re: Acceder a una matriz dentro de una estructura ?
Publicado por: d00ze13 en 2 Enero 2011, 20:39 PM
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?
Título: Re: Acceder a una matriz dentro de una estructura ?
Publicado por: leogtz en 2 Enero 2011, 20:51 PM
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;
}
Título: Re: Acceder a una matriz dentro de una estructura ?
Publicado por: Garfield07 en 2 Enero 2011, 20:52 PM
No pues 0, 1 seria caracter 2 de linea 1