[C con Clase] mas dudas sobre matrices y punteros

Francesc fcabecer en xtec.cat
Vie Feb 9 19:44:52 CET 2007


Esto es cierto, sin embargo la idea és que la subrutina trabaje sin saber 
cual es la matriz elegida, por eso en la función main introducía un puntero 
al primer elemento de la matriz "ELEGIDA".
La idea és que la subrutina trabaje sin saber cual es la matriz 
seleccionada!!

Otras alternativas que había barajado son:
Pasar a la funcion un entero y en esa funcion mediante un switch trabajar 
con cada casilla de la matriz, sin embargo eso obliga a repetir el código un 
montón de veces.
O bien podria volcar la matriz elegida en una matriz inicialmente vacía en 
la función main, y que la subrutina trabaje con esta matriz "estandar",
però ambas soluciones se me antojan un tanto "groseras"

No se le ocurre alguna manera de "engañar" a strcpy, o strcat con el 
puntero?

Gracias
----- Original Message ----- 
From: "Steven Davidson" <steven en conclase.net>
To: <cconclase en listas.conclase.net>
Sent: Friday, February 09, 2007 4:08 AM
Subject: Re: [C con Clase] mas dudas sobre matrices y punteros


Hola Francesc,

El pasado 2007-02-08 19:29:36, Francesc Cabecerans escribió:

FC> Hola de nuevo!

[CORTE]

FC> char *puntero;
FC> char cadena_de_caracteres[30]="";
FC> char matriz1[50][10][30]={"UNO", "DOS","TRES", etc....};
FC> char matriz2[50][10][30]={"UNObis", "DOSbis","TRESbis", etc....};
FC> ...
FC> char matrizn[50][10][30]={"UNOn", "DOSn","TRESn", etc....};
FC> ////////
FC> en la funcion main,  mediante switch, hago
FC> puntero=matrizx[0][0];  (donde x es en cada caso del switch 1, 2 o lo 
que sea)
FC> funcion(void)        //funcion que maneja la matriz elegida
FC> .....
FC> el problema que tengo es que ahora en la función tengo un puntero a una 
matriz bidimensional y aunque "hago las operaciones necesarias para acceder 
a la casilla que deseo", por ejemplo
FC> si la casilla deseada és (pos_x,pos_y)
FC> puntero [10*pos_x+pos_y];
FC> no puedo utilizar las funciones strcpy, strcat y similares.
FC> strcpy(cadena_de_caracteres,puntero[10*pos_x+pos_y]); //me da error!! 
POR QUÉ???
FC> que alternativas tengo? dónde me equivoco?

El error está en que 'puntero' no es una matriz bidimensional. Miremos la 
declaración:

char *puntero;

Por lo tanto, al acceder al elemento apuntado obtenemos un elemento de tipo 
'char'; o sea, un carácter. Haces la siguiente invocación:

strcpy( cadena_de_caracteres, puntero[10*pos_x+pos_y] );

Veámosla de otra manera:

strcpy( char[], char );

Obviamente esto va en contra del prototipo de 'strcpy()':

char *strcpy( char *, char * );

Como no existe lingüísticamente una conversión de 'char' a 'char *', el 
compilador te da un error ya que los tipos no concuerdan y no existe una 
conversión implícita.

Según he entendido, para hacer lo que propones, tienes que usar las 
variables 'pos_x' y 'pos_y' al asignar el puntero. Esto es,

puntero = matrizx[pos_x][pos_y];

Ahora puedes hacer la copia de la cadena apuntada:

strcpy( cadena_de_caracteres, puntero );


Espero que esto te ayude.

Steven
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ 






Más información sobre la lista de distribución Cconclase