[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