Hola gente, acá sigo con mi problema sin poder resolverlo.
Pese a los esfuerzos de Gera y Willynovi aún no he podido resolver este acertijo.
Comprendo el uso de punteros, o almenos eso creo, porque a esta altura no estoy seguro de nada.
Hice un pequeño programa donde aclaré lo más que pude lo que deseo hacer, la idea es que si alguien puede lo pruebe y modifique, a ver si se logra hacer funcionar.
#include <16F887.h>
#include <string.h>
/*
#############################################################################
CODIGO DE PRUEBA SOBRE EL USO EFICIENTE DE CONSTANTES DEL TIPO CADENA DE LONGITUD VARIABLE
#############################################################################
En la ayuda del compilador CCS 4.108 aparece una forma eficiente de utilizarlas,
supuestamente se deben definir de la siguiente forma:
const char strings[][*] =
{
"HELLO",
"WORLD",
"EXTRALONGERWORD"
};
pero al compilar el programa me da el error " Expression must evaluate to a constant "
A continuacion utilizo otras formas recomendadas por Gera pero no logro hacerlas funcionar
##############################################################################
*/
void main()
{
const char *String[] = {"hola","mundo"}; //Asi defino las constantes de tipo cadena,
// como vemos son de distinta longitud
int i; //Variable Auxiliar
char *PtrCad; //Variable puntero a una cadena
char Cadena[10]={""}; //Variable cadena de 9+null inicializada a cadena vacia
//###############################################################################
// lo que deseo hacer en el codigo siguiente es copiar el texto "mundo" en la variable Cadena
// Pero no me funciona
PtrCad=String[1];
for (i=0;*PtrCad;i++){ //Desde el inicio de Cadena y mientras PtrCad no sea nulo
Cadena[i]=*PtrCad++; //Copio el contenido de la posicion apuntada por PtrCad en Cadena,
} // e incremento la posicion de PtrCad
// No se que esta mal pero no funciona
//###############################################################################
//###############################################################################
//Aca intento hacer lo mismo pero con la segunda opcion que me indico Gera
// pero ni siquiera me compila, si habilito la sig. instruccion al compilar me da el error:
// "Expecting LVALUE such as a variable name or * expression"
// strcpy(Cadena,String[0]);
//###############################################################################
//###############################################################################
// Aca nuevamente, esta opcion no me da errores en tiempo de compilacion,
// pero tampoco me funciona
sprintf(Cadena,"%s",String[1]);
//###############################################################################
while(true);
}
Bueno, espero poder encontrar la mejor forma de resolverlo, sino tendré que realizar el codigo con las constantes string de longitud fija,
que así si me funciona correctamente
; aunque se desperdicia memoria de programa.
A la espera de alguna ayuda o consejo.
Saludos
Sergio