我得到了一个C语言的微控制器项目。我是一个很有成就的程序员,但不是用这种语言。我“认为”我的问题与C语法有关(而且我缺乏理解),而不是微控制器编译器,因此为了简洁起见,我将忽略编译器问题。
我正试图使用一个参差不齐/参差不齐的数组来存储字体信息,以便在LCD上显示快速回忆。有其他方法可以解决这个问题,但我有理由坚持这个概念。
假设在这个例子中,我的字体中只有三个字形(字符)。未知的是定义该标志符号的每一行的长度。示例:
glyph{a}需要以下数据:
{65,8,12,1,0,0x18,0x3c,0x66,0xc3,0xc3,0xc3,0xc3,0xff,0xff}
glyph{'}需要以下数据:
{39,2,3,4,9,0xc0,0xc0,0xc0}
glyph{.}需要以下数据:
{46,2,2,4,0,0xc0,0xc0}
考虑到这一点,这是我的代码。

//This is where I attempt to make my Jagged array.
 char X,Y, LeftOffSet, BaseOffSet;
 char * font[3]={{46,2,2,4,0,0xC0,0xC0},
                {39,2,3,4,9,0xC0,0xC0, 0xC0},
                {65,8,12,1,0,0x18, 0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF}};

//None of these assignments work properly.
 LeftOffSet=font[0][0];  // expected assignment = {46}
 LeftOffSet=font[1][4];  // expected assignment = {9}
 LeftOffSet=font[2][1];  // expected assignment = {8}

这段代码看起来有用吗?我好像犯了一个很难抓住的错误。作业未按预期工作。当编译器命中第一个时,它将重置项目。
提前谢谢你的帮助。

最佳答案

如果您真的需要一个不规则的数组,那么为了使用这种内联语法构建它,您需要一个支持复合文本的现代C编译器

char *font[] = {
  (char []) {46,2,2,4,0,0xC0,0xC0},
  (char []) {39,2,3,4,9,0xC0,0xC0, 0xC0},
  (char []) {65,8,12,1,0,0x18, 0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF}
};

如果编译器不支持复合文字,则只能将内部数组定义为单独的命名对象
char row0[] = {46,2,2,4,0,0xC0,0xC0},
     row1[] = {39,2,3,4,9,0xC0,0xC0, 0xC0},
     row2[] = {65,8,12,1,0,0x18, 0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF},
     *font[] = { row0, row1, row2 };

您的原始代码不是有效的C。如果它编译了,那只是由于某些编译器扩展,而不是您认为的那样。
p.s.与'C' Segmentation fault with 2d array相同的问题

10-04 20:55