我使用字符串和指针为 8051 微 Controller 的 LCD 接口(interface)编写了以下代码。我分别声明了两个字符串,即 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);
}
最佳答案
这一行
ptr1=&str1[0];
必须位于函数内,所有可执行代码也必须如此,除了作为定义的一部分合并的初始化语句之外。
所以你需要
char *ptr1 = str1;
编辑(来自OP的评论)如下:
#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;
我查看过reg51.h并且没有 str1
或 str2
或 ptr1
或 ptr2
。因此,如果您仍然收到错误,则说明您还没有告诉我们一些事情。
关于c - 指针重定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41349232/