Foro de elhacker.net

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
  1. #include <iostream>
  2. using namespace std;
  3. struct ejemplo{
  4.       char matriz[5][5];
  5.       };
  6. void llenado(struct ejemplo *disco)
  7. {
  8.     strcpy(disco.matriz[0][1], "a"); /*Aqui es donde querria acceder, pero no me deja*/
  9. }
  10. int main(void)
  11. {
  12.    int asd;
  13.    struct ejemplo llamada;
  14.    llenado(llamada);
  15.    cout<<llamada.matriz[0][1];
  16.  
  17.    cin>>asd;
  18. }
  19.  


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
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4. struct ejemplo{
  5.       char matriz[5][5];
  6.       };
  7. void llenado(struct ejemplo *disco)
  8. {
  9.     strcpy(disco->matriz[0],"a"); /*Aqui es donde querria acceder, pero no me deja*/
  10. }
  11. int main(void)
  12. {
  13.    int asd;
  14.    struct ejemplo llamada;
  15.    llenado(&llamada);
  16.    cout<<llamada.matriz[0];
  17.  
  18.    cin>>asd;
  19. }

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

Código
  1. #include <iostream>
  2. using namespace std;
  3. struct ejemplo{
  4.       char matriz[5][5];
  5.       };
  6. void llenado(struct ejemplo *disco)
  7. {
  8.     strcpy(disco->matriz[0], "a"); /*Aqui es donde querria acceder, pero no me deja*/
  9. }
  10. int main(void)
  11. {
  12.    int asd;
  13.    struct ejemplo llamada;
  14.    llenado(&llamada);
  15.    cout<<llamada.matriz[0];
  16.  
  17.    cin>>asd;
  18. }


Título: Re: Acceder a una matriz dentro de una estructura ?
Publicado por: leogtz en 2 Enero 2011, 20:30 pm
Código
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. struct ejemplo
  5. {
  6.    char matriz[5][5];
  7. };
  8. void llenado(struct ejemplo *disco)
  9. {
  10.     strcpy((*disco).matriz[0], "foro.elhacker.net"); /*Aqui es donde querria acceder, pero no me deja*/
  11. }
  12.  
  13. int main(void)
  14. {
  15.    struct ejemplo llamada;
  16.    llenado(&llamada);
  17.    cout << llamada.matriz[0];
  18. }
  19.  


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
  1. 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
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. struct ejemplo
  5. {
  6.    char matriz[5][5];
  7. };
  8. void llenado(struct ejemplo *disco)
  9. {
  10.     //strcpy((*disco).matriz[0], "foro.elhacker.net"); /*Aqui es donde querria acceder, pero no me deja*/
  11.     disco->matriz[0][1] = 'a';
  12.     (*disco).matriz[0][1] = 'a';
  13. }
  14.  
  15. int main(void)
  16. {
  17.    struct ejemplo llamada;
  18.    llenado(&llamada);
  19.    cout << llamada.matriz[0][1];
  20.    return 0;
  21. }
  22.  


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