c - 如何从c中的头文件外部动态设置头文件中数组的大小?

标签 c data-structures header structure

//stack.h 
struct stack{
    int top;
    char data[];   //set the size of this array
}s;

void init(){    
    s.top = -1;
}

int isFull(){
    return (s.top==MAX-1) ? 1 : 0;
}

 int isEmpty(){
    return (s.top==-1) ? 1 : 0;
}   

void push(char ch){
    if(!isFull()){
        s.data[++s.top] = ch;
    }else{
        printf("\n The stack is full\n");
    }
}

 char pop(){
    return (!isEmpty()) ? s.data[s.top--] : '\0';
}

我想在头文件中实现这个堆栈,并想从外部设置数据数组的大小。我知道这是一个头文件,如果我们更改头变量,它就没有用,但仍然很好奇。

最佳答案

您的结构包含所谓的灵活数组成员。这样的结构可以通过动态分配结构空间加上灵活数组成员所需的大小来创建。

struct stack{
    int top;
    char data[];
} *s;

void initStack()
{
    s = malloc(sizeof(struct stack) + MAX * sizeof(char));
}

关于c - 如何从c中的头文件外部动态设置头文件中数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58956084/

相关文章:

c++ - 初始化 Vanilla C 结构

c++ - C/C++ : Naming conventions for arrays?

c - 删除链表的最后一个节点。每个节点都有一个数据指针,指向一些数据

c++ - 使用优先级队列结构?

c - 人们什么时候开始想到 'C is portable assembler' 的?

c - 如何使用 termcap 库在终端中设置接口(interface)

c# - 高效地在内存中存储和搜索目录树

c++ - 什么是 C++ 中头文件的保护 block ?

php - 不同的标志页面wordpress

c++ - 在头文件中使用一个类作为另一个类中的值类型