将数组转换为字符串

时间:2012-08-31 07:04:31

标签: c

`#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)中发出警告:指向不同对象的指针。 如何将数组转换为字符串?这是对的吗? 收到的字符串应该与可用的字符串数组进行比较..

2 个答案:

答案 0 :(得分:2)

创建包含字符串的数组,例如

char foo[] = "bar";

它实际上与以下

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

或以下

const char *foo = "bar";

这个变量foo既可以用作数组(即第二个字母是foo[1]),也可以用作可以传递给函数的指针(如strlen(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(bar) = 8
strlen(bar) = 3

答案 1 :(得分:0)

a是char指针数组,而c是字符指针。 您必须将您的喜欢更改为j=strcmp(a[i],c);

编辑:

serial_int函数中,chr是字符数组,因此c[i]=chr不正确。我不是你的逻辑,但从语法上来说它应该是c[i]=chr[i]

此外,您没有使用父循环的j,这表示您在内部for循环的每次迭代中都在执行相同的操作。