0
`#include<reg51.h>
#include<string.h>
#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");
      }
}
}`

コンパイラは 55 行目 (BOLD) で警告を出しています: 別のオブジェクトへのポインタ。配列から文字列への変換はどうですか?それが正しいか?受信した文字列は、使用可能な文字列の配列と比較する必要があります..

4

2 に答える 2

2

のような文字列を含む配列の作成

char foo[] = "bar";

それは実際には次のものと同じです

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

または次の

const char *foo = "bar";

この変数はfoo、配列として (つまり、2 番目の文字がfoo[1])、または関数に渡すことができるポインターとして使用できます (likestrlen(foo)は 3 を返します)。

したがって、プログラムの観点からは、文字配列または文字ポインターは同等ですが、文字配列に代入することはできませんが、ポインターに代入することはできます。したがって、次は問題ありません。

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

しかし、これは大丈夫ではありません:

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

文字配列と文字ポインターの間には別の違いもあります。文字配列でsizeof演算子を使用すると、配列内の文字数 (終端のゼロを含む) が返されますが、文字ポインターではポインターのサイズが返されます。

例:

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));

上記のコードを 64 ビット マシン (ポインターは 8 バイト) で実行すると、次のように出力されます。

sizeof(foo) = 4
strlen(foo) = 3
sizeof(バー) = 8
strlen(バー) = 3
于 2012-08-31T08:55:57.150 に答える
0

aは char ポインターの配列であり、cは文字ポインターです。あなたはあなたの好みを変える必要があるでしょうj=strcmp(a[i],c);

編集:

あなたのserial_int関数でchrは、文字の配列なのでc[i]=chr間違っています。あなたのロジックはわかりませんが、構文的にはc[i]=chr[i].

また、j親ループを使用していません。これは、内側の for ループの各反復で同じことを行っていることを示しています。

于 2012-08-31T07:07:59.303 に答える