结构成员访问错误

时间:2017-02-02 16:18:19

标签: c struct

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>

typedef struct {
int tos;
char stackarr[];
}STACK;

STACK paren;
paren.tos = -1;

void push()
{
paren.tos++;
paren.stackarr[tos] = '(';
}

这给了我以下错误:

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
paren.tos = -1;
     ^
In function ‘push’:
error: ‘tos’ undeclared (first use in this function)

我是初学者,不知道为什么我会收到此错误。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您无法在功能外执行任务;只允许初始化demo):

STACK paren = {.tos = -1};

如果不使用此部分,则您的方法无效:灵活成员(即char stackarr[]末尾的struct)无法在静态分配的空间中工作;你需要使用动态分配。有关如何使用灵活结构成员的说明,请参阅this Q&A

或者,您可以将最大元素数预先分配到stackarr,即

typedef struct {
    int tos;
    char stackarr[MAX_STACK];
} STACK;
STACK paren = {.tos = -1};

这种方法的明显局限性是堆栈不能超过其预分配限制。