2

我正在尝试使用指定的初始化程序初始化结构数组:

A[size].from = {[0 ... size - 1] = 0};
A[size].to = {[0 ... size - 1] = 0};

列表.h:

typedef struct Buffer
{
    int from;
    int to;
}buffer_t;
typedef struct shared_memory
{
buffer_t A;
int size;
} share_t

主程序

#include <stdio.h>    
#include "list.h"  
buffer_t A[];
int size;
void main(int argc, char *argv[])
{
    share->share_t *share = (share_t *)malloc(sizeof(share_t));
    long arg = strtol(argv[1], NULL, 10);
    size = arg;
    share->A[size] = {[0 ... size-1] = 0};
}

但是,这是我收到的以下错误:

在此处输入图像描述

我正在使用 MinGW gcc 和命令提示符来编译这段代码,我正在 Visual Studio 中编写这段代码。

4

1 回答 1

2

您的代码是赋值表达式,而不是初始化程序。初始化只能在定义对象时发生。

此外,数组必须定义一个大小。并且有比尝试使用指定的初始化范围更好的方法来对对象进行零初始化。

这里有两个选项:

int main(int argc, char *argv[])
{
    long size = strtol(argv[1], NULL, 10);
    buffer_t A[size];
    memset(&A, 0, sizeof A);

或者

buffer_t *A;
size_t size;

int main(int argc, char *argv[])
{
    size = strtol(argv[1], NULL, 10);
    A = calloc(size, sizeof *A);  // already zero-initialized

后者可能更好,因为您可以检查分配失败并且它支持大分配。

于 2020-04-30T04:10:03.800 回答