你好,我写的C语言程序字符串数组后面总是显示0,怎样把这个0去掉,让0不显示,谢谢

void disp_lable_main(void)
{
#if (MODE_FREQ==0)

static INT8U const arr_lable0[]="HV Volt kv";
static INT8U const arr_lable1[]="Frenquence HZ";
static INT8U const *ptr_tip[]={ arr_lable0, arr_lable1};

static INT8U const arr_length[]={sizeof(arr_lable0),sizeof(arr_lable1)};
static INT8U const arr_x[]={2,2,2,22,22,22,22,22,13,22};
static INT8U const arr_y[]={ ROW_HV*8, ROW_FREQ*8};
INT16U i,x,y;
if (f_disp_hv)
{

LCD_Disp_String_8x16_const(2,y,arr_lable0,sizeof(arr_lable0)-1,0);
}

static void Display_Char(INT16U X,INT16U Y,INT8U Character,INT8U Font,INT8U Attribute)
{
INT8U const *ptr;
INT16U i,j,temp,addr,dot_x,dot_y;
addr=(INT16U)AP*Y+X+ADDR_PIC0; /* 显示一区所控制的显示屏行数 */

if (Font==FONT_8X16)
{
dot_x=1;
dot_y=16;
ptr=&char_8x16[Character][0];

\0(ascii 0) 字符串结束标志,只要字符串数组大小够大,编译器会自动加上。
如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失'\0'。如:
u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};

一般来说只是在内存中存在,输出时不会显示,没见到你的输出语句,无法判断追问

我刚刚试过了,你的方法是可以的,但是要是字符中间用空格,再显示字符,好像空格不能实现啊,我想问一下,这是什么原因引起的,我要做的是整个英文的界面显示,有没有更简单的方法实现,这样实现比较麻烦

追答

一个正常的字符串规定应该使用\0结束,表示的是null,所以你直接对字符数组赋值成字符串是,编译器会默认给你加上\0
空格就是两个单引号中间留空格呀,或者直接给
不正常的字符串,一个就是用字符单独赋值,一个就是给定字符数组大小恰好等于字符数,没有空间放置\0
一般处理还可以采取for(int i=0;str[i]!='\0';i++)的方式来避免对\0的处理

其实估计是你的LCD_Disp_String_8x16_const函数有问题

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-10
0是字符串结束的标志啊,没有0的话,编译器怎么知道你的字符串啥时候结束啊。你打印字符串的话,printf("%s\n",数组名);这样0是不会显示的啊。追问

我在液晶上显示,每个字符串后面,都会自带一个0,但是我不想要这个0显示出来,不知道怎么处理

追答

液晶上显示??下位机?那你要自己无看他的LCD_Disp_String_8x16_const(2,y,arr_lable0,sizeof(arr_lable0)-1,0);函数你具体怎么实现的了

第2个回答  2013-04-10
定义一个字符数组,str[20],然后将你的字符数串存在这个数组中,输出的时候用for循环实现
for(int i=0;i<strlen(str);i++)
printf("%c",str[i]);这样就OK了
第3个回答  2013-04-10
你把程序发一下,不清楚数组后总显示0什么意思,字符串数组最后一位是0是要表示字符串结束的。你把 LCD_Disp_String_8x16_const函数的内容贴到这,我感觉这样写正常是没什么问题的。
第4个回答  2013-04-10
有可能是你用的编程软件的问题,你看看在软件的菜单和设置这些菜单栏里有没有显示的选项,修改一下就行了。
相似回答