Autor Tema: Problemas en la creación de constantes tipo cadena de longitud variable  (Leído 3436 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado IOIO

  • PIC10
  • *
  • Mensajes: 46
Hola a todos en el foro.
Tengo un pequeño problema y no se si es por mi ineptitud o porque realmente hay un error en el compilador.
Yendo al grano, mi problema es para crear constantes strings de longitud variable. En la pagina de CCS (http://www.ccsinfo.com/content.php?page=varconst) hay un ejemplo que indica definirlo de la siguiente manera

Código: C
  1. const char strings[][*] =
  2. {
  3.    "HELLO",
  4.    "WORLD",
  5.    "EXTRALONGERWORD"
  6. };

Pero al compilar el programa me arroja el error....

Expression must evaluate to a constant

¿Alguien me puede explicar que es lo que estoy haciendo mal?

Utilizo la version 4.108 del compilador CCS

Desde ya muchas gracias a todos.
Saludos
Sergio
Desde Avellaneda, Buenos Aires. Argentina

Saludos,
Sergio

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Problemas en la creación de constantes tipo cadena de longitud variable
« Respuesta #1 en: 28 de Julio de 2010, 01:59:45 »
proba lo siguiente y decime si te anda:
const char *string[] = {"hola","mundo"};

saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado IOIO

  • PIC10
  • *
  • Mensajes: 46
Re: Problemas en la creación de constantes tipo cadena de longitud variable
« Respuesta #2 en: 28 de Julio de 2010, 12:50:03 »
Gracias Gera por la pronta respuesta.

Con la forma que me indicas el programa compiló correctamente, pero mi pregunta es:
¿ Como hago para referenciar cada una de las cadenas y asignarlas a otra variable cadena o imprimirlas en un LCD?
Probé varias formas y no logro hacerlo.

Por otro lado, respecto del ejemplo que propone CCS, ¿alguien sabe porque no funciona?

Saludos
Sergio
Desde Avellaneda, Buenos Aires. Argentina

Saludos,
Sergio

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Problemas en la creación de constantes tipo cadena de longitud variable
« Respuesta #3 en: 28 de Julio de 2010, 13:12:10 »
Para acceder a los distintos elementos tenes q hacer por ej:
printf("string1 %s string2 %s string3 %s\n",strings[0],strings[1],strings[2]);

Y para referenciarlas podes hacer dos cosas:
1-Creas un puntero y lo apuntas a la misma cadena:
char *variable;
variable=string[0];

2-Copias el contenido de una de las cadenas en tu variable:
char variable[16];
strcpy(variable,string[0]);

Para la segunda opcion tenes q incluir la libreria string.h
Suerte!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Problemas en la creación de constantes tipo cadena de longitud variable
« Respuesta #4 en: 28 de Julio de 2010, 13:24:31 »
la diferencia fundamental que te propone Gera es el uso de punteros, no se si estas familiarizado con eso IOIO, sino leete algo porque tiene sus custiones, yo cuando lo use recuerdo que me costo un poquito asimilar el concepto :oops:, quizas tu lo pesques de una  ;-)
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado IOIO

  • PIC10
  • *
  • Mensajes: 46
Re: Problemas en la creación de constantes tipo cadena de longitud variable
« Respuesta #5 en: 29 de Julio de 2010, 02:04:56 »
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.

Código: CSS
  1. #include <16F887.h>
  2. #include <string.h>
  3. /*
  4. #############################################################################
  5.  
  6.      CODIGO DE PRUEBA SOBRE EL USO EFICIENTE DE CONSTANTES DEL TIPO CADENA DE LONGITUD VARIABLE
  7.  
  8. #############################################################################
  9.  
  10. En la ayuda del compilador CCS 4.108 aparece una forma eficiente de utilizarlas,
  11. supuestamente se deben definir de la siguiente forma:
  12.  
  13. const char strings[][*] =
  14. {
  15.    "HELLO",
  16.    "WORLD",
  17.    "EXTRALONGERWORD"
  18. };
  19.  
  20. pero al compilar el programa me da el error " Expression must evaluate to a constant "
  21.  
  22. A continuacion utilizo otras formas recomendadas por Gera pero no logro hacerlas funcionar
  23.  
  24. ##############################################################################
  25. */
  26.  
  27.  
  28.  
  29. void main()
  30. {
  31.         const char *String[] = {"hola","mundo"};        //Asi defino las constantes de tipo cadena,
  32.                                         // como vemos son de distinta longitud
  33.         int  i;                 //Variable Auxiliar
  34.         char *PtrCad;           //Variable puntero a una cadena
  35.         char Cadena[10]={""};   //Variable cadena de 9+null inicializada a cadena vacia
  36.  
  37.  
  38.  
  39.         //###############################################################################
  40.         // lo que deseo hacer en el codigo siguiente es copiar el texto "mundo" en la variable Cadena
  41.         // Pero no me funciona
  42.        
  43.                 PtrCad=String[1];
  44.                 for (i=0;*PtrCad;i++){          //Desde el inicio de Cadena y mientras PtrCad no sea nulo
  45.                         Cadena[i]=*PtrCad++;    //Copio el contenido de la posicion apuntada por PtrCad en Cadena,
  46.                 }                               // e incremento la posicion de PtrCad
  47.  
  48.         // No se que esta mal pero no funciona
  49.         //###############################################################################
  50.  
  51.  
  52.  
  53.         //###############################################################################
  54.         //Aca intento hacer lo mismo pero con la segunda opcion que me indico Gera
  55.         // pero ni siquiera me compila, si habilito la sig. instruccion al compilar me da el error:
  56.         // "Expecting LVALUE such as a variable name  or  * expression"
  57.  
  58.         //      strcpy(Cadena,String[0]);
  59.  
  60.         //###############################################################################
  61.  
  62.  
  63.  
  64.         //###############################################################################
  65.         // Aca nuevamente, esta opcion no me da errores en tiempo de compilacion,
  66.         // pero tampoco me funciona
  67.        
  68.                 sprintf(Cadena,"%s",String[1]);
  69.  
  70.         //###############################################################################
  71.        
  72.         while(true);
  73. }

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. :5]

A la espera de alguna ayuda o consejo.

Saludos
Sergio
Desde Avellaneda, Buenos Aires. Argentina

Saludos,
Sergio


 

anything