Problema con el paso de un array en CCS

Hola tengo un inconveniente nose como pasar un array de caracteres a una funcion un ejemplo sencillo por favor.
tengo un array con 7 palabras pero supongamos que quiero mostrar las primeras cuatro despues voy hacer otro if para mostrar el resto , lo hago asi porque el diplay es de 4 filas entonces muestro las prtimeras 4 y luego voy a mostrar el resto, pero no viene al caso eso.
Yo quiero aunque sea mostrar las primeras 4 palabras en el display y no aparece es como que no pasara el array a la funcion y nose como hacer?


Código:
const char *m_principal[] = {"LUCES","POTENCIA ELECTRICA","RIEGO","CLIMATIZACION","FECHA Y HORA","ENT. ANALOGICA","CONFIGURACION"};

void menu (char *menu_array[])
{
   int n=0;
   int i;
   lcd_putc("\f");
   for(i=0; i<=4;i++)
   {
      n++;
      if((*screen==1)&&(n<=4)){
         lcd_gotoxy(2,i+1);
         printf(lcd_putc,"%s",menu_array[i]);
      }//FIN IF
      
   
   }//fin for
   

}//FIN MENU
 
a ver si todos los dias aprendes algo nuevo.

si efectivamente es posible hacer lo que quieres digamos que metemos una frase:

char frase="perro gato perico pez";

y queremos mostrar de a una en una

¿que hacemos?

TOKEN debes hacer un token con strtok( ); de la libreria #include <string.h>

digamos que un string "o cadena" es un conjunto de caracteres
ejemplo:

aeuio.+-"·%&/()=123456
eso es un string y queremos dividirlo

para dividirlo necesitas un token y una letra que sea el divisor del string normalmente un espacio vacio es el divisor pero puede ser cualquier caracter.

en este caso usaras el caracter ,.- y espacio vacio para dividir tus strings.

char frase="perro,gato.perico-pez chango";
en el ejemplo dividi con ",.- " ahora le decimos al token como dividir.

¿como funciona STRTOK?

bueno es simple :

necesitas un apuntador en este caso

Código:
char frase[30]="perro,gato.perico-pez chango";
char *puntero;
char divide[4]=",.-";


puntero= strtok(frase, divide);     //hago un token a mi cadena

 while(puntero !=0 )
      {
        printf("imprime:%s \n\r ",puntero );

         puntero = strtok(0, divide);        //empezamos a hacer tokens
               
      }
 
Hola , creo que no me explique bien, son palabras diferentes es un menú como se observa. No estoy armando una frase fíjate que cada una está separado en comillas, " Luces" , "Potencia Eléctrica", ... Lo mío es más sencillo quiero que ese array, pasarlo por puntero o referencia nose como sería a una función.
Y después en la función leerla, poner array en un for y van apareciendo. Observa de nuevo mi código por favor. Lo que hiciste vos está bueno porque aprendí algo que no sabía, pero lo que quiero es algo más sencillo.

 
es lo que te dije metes toda una frase digamos el menu.
char menu[40]="empezar.limpiar,cambiardatos-borrar";

digamos que quiero que aparescan asi:

empezar
limpiar
cambiar datos
borrar

para eso es el TOKEN para separar una cadena con unos caracteres que uno elije en el ejemplo puse".,-"

puede ser cualquier otro caracter.

ahora con el ejemplo que puse anterior mente se puede separar la cadena solo Separar ya depende de ti que mientras separes la cadena salga un menu.

no se un contador digamos

while(puntero !=0 )
{
printf("imprime:%s \n\r ",puntero );

puntero = strtok(0, divide); //empezamos a hacer tokens

contador++;
}


y por otro lado en un switch case hacer lo que esta dentro del contador

switch(contador)
{
case 0:
break;

case 1:
break;
}
 
Esta bien lo que decis TRILO-BYTE pero por favor repito revisa mi programa yo quiero armar un array y enviarlo a una funcion que es la que tengo yo sin usos raros de librerias string ni nada se tiene que poder. Ese es mi codigo, capaz tenga que sacar el *m_principal[] nose digo. no termino de comprender lo que vos me haces vos me estas armando como si fuera todo en una misma funcion, y otrp dato mas librerias coloco mas me va ocupar el programa en un Microcontrolador. por eso por favor revisa Mi programa y si estoy enviando bien el vector a la funcion, porque no me aparece nada.
Mas abajo ves como lo llamo

Código:
const char *m_principal[] = {"LUCES","POTENCIA ELECTRICA","RIEGO","CLIMATIZACION","FECHA Y HORA","ENT. ANALOGICA","CONFIGURACION"};

void menu (char *menu_array[])
{
   int n=0;
   int i;
   lcd_putc("\f");
   for(i=0; i<=4;i++)
   {
      n++;
      if((*screen==1)&&(n<=4)){
         lcd_gotoxy(2,i+1);
         printf(lcd_putc,"%s",menu_array[i]);
      }//FIN IF
      
   
   }//fin for
   

}//FIN MENU

int menu_main(void)
{
   int i=1;
   int key;
   int tope = 7;
   int refresco=1;
   
   while(key!=key_menu)
   {
         if((sel_item>0)&&(sel_item<5)&&(refresco<2))
         {
            menu(*m_principal,&refresco);
         }


   }//FIN  WHILE PRINCIPAL

}



Igual Estoy revisando y veo que me ocupa mas memoria el programa mas RAM y ROM del micro controlador con el array, si coloco

lcd_gotoxy(2,1);
lcd_putc("LUCES");
lcd_gotoxy(2,2);
lcd_putc("POTENCIA ELECTRICA");
lcd_gotoxy(2,3);
lcd_putc("RIEGO");
lcd_gotoxy(2,4);
lcd_putc("CLIMATIZACION");

Todo lo anterior ocupa menos que si hago un array y un for para leer 4 valores, y no me puedo dar el lujo de derrochar memoria pórque me falta aun mucho mas por programar
 
Última edición:
Atrás
Arriba