指针重定义错误

时间:2016-12-27 17:06:21

标签: c pointers c-strings

我使用字符串和指针编写了以下代码,用于8051微控制器的LCD接口。我声明了两个字符串,分别是str1和str2以及指针ptr1和ptr2。当我初始化两个指向字符串开头的指针时,我得到错误C231说' ptr1' :重新定义和ptr2相同。以下是代码:

#include<reg51.h>
char str1[]="abcd";
char str2[]="efgh";
int i;
char *ptr1;
ptr1=&str1[0];
char *ptr2;
ptr2=&str2[0];
sbit rs=P1^0;
sbit wr=P1^1;
sbit en=P1^2;
void delay()
{
   int i,j;
   for(i=0;i<100;i++)
   for(j=0;j<1275;j++);
}
void lcd_inl()
{
   comwrt(0x38);
   comwrt(0x0f);
   comwrt(0x01);
   comwrt(0x81);
}
void datwrt(char)  
{
    P2=ch;
    rs=1;
    wr=0;
    en=1;
    delay();
    en=0; 
}
void comwrt(int)
{
   P2=i;
   rs=0;
   wr=0;
   en=1;
   delay();
   en=0;
}
void main()
{
   P1=0x00;
   P2=0x00;
   lcd_inl();
   delay();
   while(!*ptr1)
   {
       datwrt(*ptr1);
       ptr1++;
   }
    delay();
    while(!*ptr2)
   {
      comwrt(0xc1);
      delay();
      datwrt(*ptr2);
      ptr2++;
   }
   while(1);  
   }

1 个答案:

答案 0 :(得分:2)

这一行

SET ano=%Ret:~6,4%
除了作为定义的一部分合并的初始化语句之外,

必须在函数内,所有可执行代码都必须。

所以你需要

ptr1=&str1[0];

编辑(来自OP的评论),如下所示:

char *ptr1 = str1;

我查看了reg51.h,但没有#include<reg51.h> char str1[]="abcd"; char str2[]="efgh"; int i; char *ptr1 = str1; char *ptr2 = str2; sbit rs=P1^0; sbit wr=P1^1; sbit en=P1^2; str1str2ptr1。因此,如果您仍然收到错误,有些事情您没有告诉我们。