【发布时间】:2020-08-19 13:13:44
【问题描述】:
我正在尝试从程序内存中读取和打印 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);
}
【问题讨论】:
-
您将未初始化变量 (
string) 的值传递给strcpy_P。您也没有显示Unicode_text在使用之前被初始化。 -
我修复了字符串 init,在 strcpy 之前仍然不满意 "Unicode_text=Greek_text",我现在将编辑它
-
strcpy_P(0, Unicode_text[1])akastrcpy_P(NULL, Unicode_text[1])真的对你有意义吗? -
/** \ingroup avr_pgmspace \fn char *strcpy_P(char *dest, const char *src) 好吧,因为“string”是目标指针,它确实
-
你知道
x = 2; y = x + 3;也可以写成y = 2 + 3;。好吧,string = 0; strcpy_P(string, Unicode_text[1])和strcpy_P(0, Unicode_text[1])是一回事。你没有通过string;传递变量的概念甚至不是一回事。传递的指针是存储在string中的指针,即0又名NULL,它不是有效的目标指针。你在做strcpy_P(0, Unicode_text[1])akastrcpy_P(NULL, Unicode_text[1]),这没有任何意义。
标签: c string unicode embedded avr