Autor Tema: Tutorial - Cadenas y arreglos de chars  (Leído 68916 veces)

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

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #30 en: 21 de Julio de 2009, 16:04:37 »
es porque strcmp usa punteros, y como sabes no se puede usar un puntero a una constante, en este caso "JEJE" sería constante, lo que se tendría que hacer es:

char temp[5]="\0";

strcpy(temp,"JEJE");
if(strcmp(Buffer,temp)==0){
...
...
}

saludos
.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #31 en: 21 de Julio de 2009, 18:48:45 »
Claro, pero lo digo porque gera lo hizo asi. Mira:

Funcion: strcmp

Sintaxis: int strcmp(char *s1, char *s2);
Esta función recibe dos cadenas como parámetros y devuelve 0 si son iguales, un negativo si s1<s2 y un positivo si s1>s2.

Descripción:
Bueno, en la sintaxis ya expliqué bastante. La función básicamente sirve para saber si una cadena es igual a otra. Devolviendo 0 en este caso, y distinto de 0 si son distintas. Otro error común, es usar el operador == para saber si las cadenas son iguales:
if(string1==string2) MAL

Ejemplo:
Código: C
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. void main()
  5. {
  6.         char s1="hola mundo!"; //cuanta originalidad jaja
  7.         if( strcmp(s1,"chau mundo!") == 0);
  8.               printf("las cadenas son iguales");
  9.         else
  10.               printf("las cadenas son distintas");
  11. }

Comentarios:
Este ejemplo siempre va a dar negativo, salvo que pongamos como segundo parámetro de la función "hola mundo!". La única precaución que hay que tener al llamar a esta función, es que las cadenas tengan un terminador (NULL), si no puede haber un overflow.

---------------------------------------EN CONSTRUCCIÓN----------------------------------------

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #32 en: 21 de Julio de 2009, 19:16:14 »
pequeño error seguramente que no se lo estaba viendo, porque es incorrecto usar constantes en strcmp

saludos
.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #33 en: 21 de Julio de 2009, 20:25:07 »
Hmm, en ese ejemplo me falto declarar s1 asi:
Código: C
  1. char s1[]="hola mundo!";

Y en cualquier compilador de C estandar se le puede pasar una constante como parametro a strcmp. Ya que la funcion usa punteros propios para determinar si las cadenas son iguales.

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

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #34 en: 21 de Julio de 2009, 22:39:33 »
No olvidemos que CCS no es C estandar.
El papel lo aguanta todo

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #35 en: 21 de Julio de 2009, 23:42:38 »
No olvidemos que CCS no es C estandar.

No, y la verdad q a veces me molesta. Pero bueh, antes q andar programando en asm... jajaja

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

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #36 en: 22 de Julio de 2009, 01:29:15 »
Entonces, en teoria, deberia poderse pero como CCS es otra webada (no es C estandar) no se puede... Vaya Mie"#$%  :lol:

Con punteros previos sera entonces.
Gracias por la aclaracion.

Salu2.

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #37 en: 30 de Julio de 2009, 01:26:24 »
hola, que pasa si formamos un arrays de cadenas

char cadena[5][10]={"hola","como","estas","bien","gracias"};

eso si se puede, donde el primer indice indica el numero de cadenas que se pueden almacenar, y el segundo indice el tamaño de cada cadena.
 
habria alguna forma de asignarle a cadena, las cadenas dentro del bucle del programa principal, ya que eso no he podido, o en todo caso sprintf parece una solucion.
lo que se me ocurre hacer es lo siguiente

char cadena[5][10];

void main{
cadena[0]="hola";
cadena[1]="como";
cadena[1]="estas";
cadena[1]="bien";
cadena[1]="gracias";


while(true)
{
}
}


se que lo anterior esta mal, como se haria de otra manera, hay forma



Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #38 en: 30 de Julio de 2009, 01:30:04 »
aa disculpen se me paso, es asi

char cadena[5][10];

void main{
cadena[0]="hola";
cadena[1]="como";
cadena[2]="estas";
cadena[3]="bien";
cadena[4]="gracias";


while(true)
{
}
}


Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #39 en: 30 de Julio de 2009, 01:44:41 »
sprintf puede funcionar, pero hay una funcion q hace lo q queres: strcpy. Unos posts arriba explico como se usa.
Saludos!!

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

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #40 en: 30 de Julio de 2009, 08:18:16 »
gracias amigo gera, efectivamente funciona ya los probe de las dos formas y funciona, en almacen valga la redundancia almaceno datos enviado desde la pc y funciona correctamente
char almacen[5][5]



  strcpy(almacen[j],dato);
  USART_activa_tx_nodo();
  fprintf(nodo,"%s\r","dato agregado");
  USART_activa_rx_nodo();
 j++;

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #41 en: 30 de Julio de 2009, 08:36:06 »
gracias amigo gera, efectivamente funciona ya los probe de las dos formas y funciona, en almacen valga la redundancia almaceno datos enviado desde la pc y funciona correctamente
char almacen[5][5]



  strcpy(almacen[j],dato);
  USART_activa_tx_nodo();
  fprintf(nodo,"%s\r","dato agregado");
  USART_activa_rx_nodo();
 j++;


upss creo que meti la pata, asi no funciona, primero lo hice con sprintf, asi si funciono, despues hize un guardar como, y cambie el codigo para probarlo con strcpy, pero resulta que cuando compilaba supuestamente , compilaba el codigo que habia hecho con sprintf,
me sale error, no compila..
upssssss disculpa

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #42 en: 30 de Julio de 2009, 12:11:36 »
Cual es el error? Asegurate q lo q le pasas a strcpy son dos punteros, y q almacen tenga espacio suficiente como para contener a dato.
Saludos!

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

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #43 en: 30 de Julio de 2009, 19:38:01 »
ok gera, voy a revisar el codigo y despues les digo que paso, muchas gracias

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #44 en: 31 de Julio de 2009, 23:47:37 »
gera, ahi esta el ejemplo, parece que el ccs no soporta crear matrices de cadenas, ten en cuenta que yo en creado una matriz,  lo unico que imprime es "HI"
 
Citar
#include <16F628A.h>

#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD
#use delay(clock=20000000)
#use rs232(baud=19200, xmit=PIN_B2,rcv=PIN_B1,stream=esclavo)

char mensaje[10][5];
char men1[5]="hi\0";
char men2[5]="ho\0";
char men3[5]="la\0";
char men4[5]="co\0";
char men5[5]="mo\0";
char men6[5]="es\0";
char men7[5]="tas\0";


//rutina de interrupcion
#int_rda
void interrupt_service_rutine_rda(void)
 {

 }

void main(void) {

        int i;
        setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
        setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);
        setup_timer_2(T2_DISABLED,0,1);
        setup_comparator(NC_NC_NC_NC);
        setup_vref(FALSE);
        port_b_pullups(False);
        set_tris_b(0b00000010);
     
        delay_ms(100);
        enable_interrupts(global);
        enable_interrupts(int_rda);
       
       fprintf(esclavo,"%s","hi");
       strcpy( mensaje,men1);
       i++;
       strcpy( mensaje,men2);
       i++;
       strcpy( mensaje,men3);
       i++;
       strcpy( mensaje,men4);
       i++;
       strcpy( mensaje,men5);
       i++;
       strcpy( mensaje,men6);
       i++;
       strcpy( mensaje,men7);
       for(i=0;i<7;i++)
       fprintf(esclavo,"%s",mensaje);
   
      }