`#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)中发出警告:指向不同对象的指针。 如何将数组转换为字符串?这是对的吗? 收到的字符串应该与可用的字符串数组进行比较..
答案 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循环的每次迭代中都在执行相同的操作。