专栏中心

EEPW首页 > 专栏 > 指针使用及数组的末尾'\0'引出的问题

指针使用及数组的末尾'\0'引出的问题

发布人:0750long 时间:2009-07-11 来源:工程师 发布文章
指针使用及数组的末尾'\0'引出的问题

 

今天调试程序用到了指针数组,如下:

Uchar code *state[]={"OFF      ","ON       ","REMOTE   ","LOCAL    ","BACKUP   ","OFFLINE  ","ONLINE   ","NORMAL   ","EMERGENCY","STARTED  ","STOPED   ","LIMIT    ","NO-LIMIT ","MIN      ","MAX      ","NOREADY  ","READY    "};

可是伟福编译器提示:ERROR L107:ADDRESS SPACE OVERFLOW <LCD.M51>

改成如下(去掉几个数组):

Uchar code *state[]={"OFF      ","ON       ","REMOTE   ","LOCAL    ","BACKUP   ","OFFLINE  ","ONLINE   ","NORMAL   ","EMERGENCY","STARTED  ","STOPED   ","LIMIT    ","NO-LIMIT "};编译通过.  这个是哪个溢出呢,已经定义成了CODE区了,这肯定够用,是指针放在RAM里了?不太清楚.

无奈改成: Uchar code state[][9]={"OFF      ","ON       ","REMOTE   ","LOCAL    ","BACKUP   ","OFFLINE  ","ONLINE   ","NORMAL   ","EMERGENCY","STARTED  ","STOPED   ","LIMIT    ","NO-LIMIT ","MIN      ","MAX      ","NOREADY  ","READY    "};

 

LCD.h中的函数为:

void ePutstr2(Uchar x2,Uchar y2, Uchar code *ptr2)

{

        Uchar i,len=0;

        len = strlen(ptr2);

       for (i=0;i<len;i++)

         {

              DispOneChar2(x2++,y2,ptr2[i]);

              if ( x2 == 40 )

                {

                     x2 = 0; y2 ^= 1;

              }

       }

}

 

在主函数中调用:

             if(( disp[4]==4)

              {

            

               ePutstr2(30,1,&state[0][0]);  //在第2行第30个位置显示出OFF

              }

可显示的是CODE区的其他内容,跟踪执行发现指针ptr2指向的确实是”OFF”的首地址,问题就出现在len=strlen(ptr2)他判断字符串长度是以’\0’为标志的而前面定义的数组固定维数,没有空闲空间加入’\0’,所以导致把CODE区的其他内容全当成了一个数组,直到出现’\0’为止.

原来的判断字符串长度:while(isprint(ptr2[len]))   {len++;};    效果一样.

 

将数组改成:

Uchar code state[][10]={"OFF      ","ON       ","REMOTE   ","LOCAL    ","BACKUP   ","OFFLINE  ","ONLINE   ","NORMAL   ","EMERGENCY","STARTED  ","STOPED   ","LIMIT    ","NO-LIMIT ","MIN      ","MAX      ","NOREADY  ","READY    "};

问题解决,知道为什么了吧,哈哈,仔细看!多了一维.不再多说了吧……

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

C6000 DSP软件开发环境CCS介绍

视频 2009-10-22

PCB走线的电阻如何计算?

EDA/PCB 2025-03-03

DeepSeek带动国产半导体产业链需求爆发

EDA/PCB 2025-03-03

FPGA的DSP应用

视频 2009-10-22

电子电路大全(合订本)

嵌入式系统引导程序移植

视频 2009-10-22

50%新型HPC采用多芯片设计

EDA/PCB 2025-03-03

开关电源手册

实时Linux技术:如何在嵌入式LINUX中应用实时特性

视频 2009-10-22

中国首个AI原生IDE!字节跳动发布AI编程工具Trae

智能计算 2025-03-03

家用电线,我们应该选哪种规格大小,才不会过流

电子工程师指南

电子线路(提高版·模拟电路与脉冲数字电路)

绘制PCB板需知道哪些问题?

EDA/PCB 2025-03-03

华中理工大学出的C51教材

LG Innotek进军车用半导体市场 推出车用应用处理器模块

一粒沙,一个充满希望的世界

EDA/PCB 2025-03-03

人工智能将会如何颠覆物联网?

嵌入式Linux优化:加快系统起动和应用起动的过程

视频 2009-10-22

RISC-V,迎来了「破冰者」

嵌入式系统 2025-03-03
更多 培训课堂
更多 焦点
更多 视频

技术专区