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.
#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;
}
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):
#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:
#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;
}
#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];
}
muchas gracias por la explicacion, pero funciona solo la ultima que me pusisteis,
lo que no entiendo es este codigo
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?
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.
#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;
}
No pues 0, 1 seria caracter 2 de linea 1