c - C 中的指定初始化数组

标签 c arrays gcc struct designated-initializer

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

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/

相关文章:

c - 使用 "array name"和 "address-of array name"打印数组的地址

php - 从 Excel 文件上传时添加数组值

c++ - 与 GCC 共享不一致的字符串文字

c - 编译器如何处理错位?

c - 如何以编程方式在我的字符设备上设置权限

C 旋转位域(需要解释)

c++ - 如何通过函数传递数组并将其返回

c++ - 如何显示cmake的gcc版本?

c - 大小为 8 的未初始化值

c - 使用 ioctl()、read() 和 malloc() 从服务器接收消息无法正常工作