conversión de matriz a cadena

`#include #include #include"_LCD_R8C.c" unsigned char c[11]; void serial_int (void) interrupt 4 { static unsigned char chr[11]; int i,j; if (RI==1) { RI = 0; TI = 0; chr[11] = SBUF; for(j=0;j<1;j++) { for(i=0;i<=10;i++) { c[i]=chr; } c[11]='\0'; } } } 
 int main() { unsigned char a[2][11]={"$0016221826","$0123456789"}; int i,j; lcd_init(); lcd_clear(); SCON = 0x50; TMOD = 0x20; TH1 = 0xFD; ET0 = 0; TR1 = 1; RI = 1; ES = 1; EA = 1; for(i=0;i<=1;i++) { **j=strcmp(a,c);** if(j==0) { lcd_printxy(1,1,"yes"); } else { lcd_printxy(1,6,"no"); } } }` 

el comstackdor está advirtiendo en la línea 55 (BOLD): puntero a diferentes objetos. ¿qué hay de la conversión de matriz a cadena? ¿es correcto? La cadena recibida debe compararse con la matriz disponible de cadenas.

Creando una matriz que contiene una cadena, como

 char foo[] = "bar"; 

En realidad es lo mismo que lo siguiente

 char foo[] = { 'b', 'a', 'r', '\0' }; 

o lo siguiente

 const char *foo = "bar"; 

Esta variable, foo se puede utilizar como una matriz (es decir, la segunda letra es foo[1] ) o como un puntero que se puede pasar a una función (como strlen(foo) devolverá 3).

Entonces, desde el punto de su progtwig, una matriz de caracteres o un puntero de caracteres son equivalentes, con la excepción de que no puede asignar a una matriz de caracteres pero puede asignar al puntero. Así que lo siguiente está bien:

 char foo[] = "bar"; char *pfoo = foo; 

Pero esto no está bien:

 const char *pfoo = "bar"; char foo[] = pfoo; /* Error! */ 

También hay otra cosa que es diferente entre las matrices de caracteres y los punteros de caracteres: el uso del operador sizeof en una matriz de caracteres devuelve el número de caracteres en la matriz (incluido el cero), pero en un puntero de caracteres devuelve el tamaño del puntero .

Ejemplo:

 char foo[] = "foo"; const char *bar = "bar"; printf("sizeof(foo) = %lu\n", sizeof(foo)); printf("strlen(foo) = %lu\n", strlen(foo)); printf("sizeof(bar) = %lu\n", sizeof(bar)); printf("strlen(bar) = %lu\n", strlen(bar)); 

Si ejecuta el código anterior en una máquina de 64 bits (donde los punteros tienen ocho bytes), se imprimirá:

 sizeof (foo) = 4
 strlen (foo) = 3
 sizeof (bar) = 8
 strlen (barra) = 3

a es a matriz de punteros de caracteres mientras que c es un puntero de caracteres. Tendría que cambiar su me gusta a j=strcmp(a[i],c);

EDITAR:

En su función serial_int , chr es una matriz de caracteres, por lo que c[i]=chr es incorrecto. No sé cuál es tu lógica, pero sintácticamente debería ser c[i]=chr[i] .

Además, no está utilizando j de bucle principal, lo que indica que está haciendo lo mismo en cada iteración de bucle interno.