我正在尝试使用指定的初始化程序初始化一个结构数组:
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};
}
但是,这是我收到的以下错误:enter image description here
我正在使用 MinGW gcc 和命令提示符来编译这段代码,我正在 Visual Studio 中编写这段代码。
最佳答案
您的代码是赋值表达式,而不是初始值设定项。初始化只能在定义对象时发生。
此外,数组必须定义大小。并且有比尝试使用指定的初始化范围更好的方法来零初始化对象。
这里有两个选项:
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
后者可能更好,因为您可以检查分配失败并且它支持大量分配。
关于c - C 中的指定初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61515634/