c - 指针重定义错误

标签 c pointers c-strings

我使用字符串和指针为 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并且没有 str1str2ptr1ptr2。因此,如果您仍然收到错误,则说明您还没有告诉我们一些事情。

关于c - 指针重定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41349232/

相关文章:

c++ - 邻接表函数中的段错误

c - 这种在 C 字符串中访问字符的方式如何工作?

c - 错误 : wide character array initialized from incompatible wide string

c - 为什么 puts 函数不适用于 C++ 中来自套接字的输入字符?

c - 如何在C中创建带有字符X的可变长度字符串

c++ - 如何查找其他c程序的运行时

c - 为什么我必须在使用它的值之前将 void 指针转换为 int 指针?

c - 在 OpenCL 中切片字符串

c - 定义和声明有什么区别?

c# - 从非托管 C 库访问 C# 方法是否安全?