Autor Tema: variable con texto  (Leído 1981 veces)

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

Desconectado juanez

  • PIC12
  • **
  • Mensajes: 90
variable con texto
« en: 04 de Mayo de 2008, 16:10:21 »
Hola, ¿se puede crear en ccs una variable de texto?

Algo asi como a[1]="Hola"
                     a[2]="Adios"

Lo unico que consigo hasta ahora es que el lcd muestre la primera letra.

Saludos

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: variable con texto
« Respuesta #1 en: 04 de Mayo de 2008, 17:08:59 »
Hola, no existe el tipo de variable string en CCS, lo que debes hacer es definir el texto a guardar como una matriz de caracteres o tipo de datos char. Un ejemplo:

Código: [Seleccionar]
char A[5]={"Hola"};
donde el tamaño de la matriz es igual al numero de caracteres +1 (porque hay que incluir el caracter de fin de linea "\0") Si quieres hacer una matriz de texto entonces deberás hacer crear una matriz de varias dimensiones N x M donde N es el numero de cadenas de texto y M el numero de caracteres +1 de la cadena mas larga. Por ejemplo:

Código: [Seleccionar]
char A[3][10]= {
           "Hola",
           "Adios",
           "Nos vemos",
};
Como cualquiera podra suponer esto genera un enorme desperdicio porque generalmente no todas las cadenas tienen la misma longitud y quedan bit sin utilizar. Si uno tiene que almacenar mucho texto una matriz de estas puede llenarte la memoria en poco tiempo. Hay un metodo alternativo que es crear una matriz de punteros que indican matrices de caracteres, de esa forma puede crear una matriz de elementos de tamaño variable, pero su aplicación tiene limitaciones en CCS, sobre todo cuando quieres almacenarlas en la ROM como constantes, y hasta donde sabia solo las versiones nuevas soportan este tipo de código. Tal vez alguien mas informado te pueda ayudar un poco mejor en esta ultima alternativa.

Un saludo.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
Re: variable con texto
« Respuesta #2 en: 04 de Mayo de 2008, 18:26:21 »
Puedes plantearlo asi:

Código: [Seleccionar]
char* A[5];

A[1]=(char*)malloc(3*sizeof(char));
A[2]=(char*)malloc(5*sizeof(char));
...

*A[1]="ALO";
*A[2]="MICRO";

La asignacion  *A[1]="ALO"; no se si funciona del todo, pero siempre puedes hacer strcpy("ALO",&A[1]);

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: variable con texto
« Respuesta #3 en: 04 de Mayo de 2008, 18:31:03 »
juanez, el indice del arreglo se refiere a cuantos lugares de memoria vas a reservar. Si queres mostrar un "hola" tenes q reservar 5 lugares... uno por cada letra, mas un "caracter nulo" q indica el final de la cadena. Por ej:
char[5]="hola"

si vas a declarar la variable al mismo tiempo q la inicializas, podes no indicar el tamaño de la misma, por ej:
char[]="hola, como te va?"

en este caso, el compilador solo se encarga de calcular el tamaño de la variable.

Te recomiendo leer un poco sobre arreglos en C, ya que una cadena no es mas q un arreglo de caracteres ;)

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

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: variable con texto
« Respuesta #4 en: 07 de Mayo de 2008, 14:03:41 »
manex, has probado utilizar tu codigo con cadenas almacenadas en la ROM?, se que CCS no puede lidiar muy bien con los punteros de constantes, porque las trata como funciones, para las matrices de caracteres solo te deja hacer algunas cosas como utilizarlas en la funcion strcpy o printf. Segun dicen las nuevas versiones los punteros a constantes son soportados pero yo habia probado con la 4.057 y no te deja pasarlos.

Una lastima, es una de las unicas cosas que le envidio a Hitech.

Un saludo.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."


 

anything