utf-8程序存储器中的字符串(__flash)

问题描述 投票:0回答:1

我正在尝试从程序存储器中读取和打印avr中的unicode字符串(希腊文,我正在使用__flash属性,但是我的字符串损坏了。例如:我得到ΧΡΤ⸮⸮而不是ΧΡΗΣΤΗ,英语似乎以某种方式起作用。

这是我这样做的方式:

在Print_menu_file.c中:

static const __flash char * const __flash *Unicode_text;

const __flash char * const __flash Greek_text[35]=
{
    (const __flash char[40]) { "ΜΕΝΟΥ ΧΡΗΣΤΗ"     }, //USER_MENU
    (const __flash char[]) { "ΡΥΘΜΙΣΗ ΗΜΕΡ/ΩΡΑΣ" }, //SET_DATE_TIME
    (const __flash char[]) { "ΠΡΟΒ. ΑΙΣΘΗΤΗΡΩΝ"  }, //SHOW_SENSRORS
    (const __flash char[]) { "ΘΕΡΜΟΚΡΑΣ. 1/2"    }, //TEMP_1_OF_2
}

void Print_string(void)
{
 char* string=0;
 Unicode_text=Greek_text;
 strcpy_P(string,Unicode_text[1]);

 lcd_print_unicode(string);
}
c string unicode embedded avr
1个回答
0
投票

就像池上的评论所暗示的那样,您的问题出在此代码中:

void Print_string(void)
{
 /////problem below//////
 char* string=0;
 /////problem above/////

 Unicode_text=Greek_text;
 strcpy_P(string,Unicode_text[1]);

 lcd_print_unicode(string);
}

您有一个指向字符缓冲区的指针指向0。现在,0可能是为目标strcopy分配的缓冲区,但很可能不是(它可能是向量表)。

strcpy_P不会为您分配缓冲区。它只会写入您提供的指针的缓冲区。

制作

char * string=0;

进入

char string[MAX_EXPECTED_STRING_LENGTH_PLUS_TERMINATING_0];

您的问题将得到解决。

© www.soinside.com 2019 - 2024. All rights reserved.