C结构和数组

0 c arrays struct

我无法获得下面的代码进行编译(请参阅错误).有关更正的建议将不胜感激.

#include <stdio.h>

typedef struct {
  char    *fldName;
  unsigned fldLen;
} Field;

typedef struct {
  char    *fldPrompt;
  unsigned startRow;
  unsigned startCol;
} Prompt;

typedef struct {
  Field   *fields[];
  Prompt  *prompts[];
  unsigned numFlds;  <<< invalid field declaration after empty field 
} Form;                    <<< in '(incomplete) struct (no name)'.

Field  firstName = { "fName", 12 };
Field  surName   = { "sName", 25 };
Field  gender    = { "gder", 1 };

Prompt fn        = { "First Name : ", 4, 10 };
Prompt sn        = { "Surname    : ", 6, 10 };
Prompt gn        = { "Gender     : ", 8, 10 };

int main (void)
{
  Form aForm = { { &firstName, &surName, &gender },
                 { &fn, &sn, &gn}, 
                 3 };  <<<  Multiple initializers for the same element
  return 0;             <<<  Too many initializers
}
Run Code Online (Sandbox Code Playgroud)

Pav*_*aev 8

您的所有错误都源于您在结构中错误地声明数组的事实.你必须指定数组的大小; 你不能只使用空括号.即这将工作:

typedef struct {
    Field *fields[3];
    Prompt *prompts[3];
    unsigned numFlds;
} Form;
Run Code Online (Sandbox Code Playgroud)

如果您需要允许不同数量的元素,则必须使用其他内容.例如,您可以将两个字段都指向:

Field **fields;
Prompt **prompts;
Run Code Online (Sandbox Code Playgroud)

但是你必须为它们动态分配和释放内存,你绝对不能使用聚合初始化程序来初始化结构.