C - 不可能在函数内声明全局数组。其他解决方案?

标签 c arrays

这就是我正在尝试做的事情: 我需要一个长度取决于变量 (NumOfRequests) 的全局数组。该变量是在函数内设置的。我认为不可能像我在以下代码中尝试的那样在函数中声明全局数组:

static uint8 NumOfRequests;

typedef struct
{
    uint16 IndexToRequest;
    GdXRequestData_ts RequestData;
    bool RequestSent;
} GdRequests;

static void SetupRequestStructures( void )
{
    uint8 i;

    for( i = 0; EepromData_ps.GD_Indices[i] != 0xFFFF; i++ )
    {
        NumOfRequests = i + 1;
    }
    GdRequests Requests[NumOfRequests];
    for( i = 0; i < NumOfRequests; i++ )
    {
        Requests[i].IndexToRequest = EepromData_ps.GD_Indices[i];
    }

}

据我所知,不可能先声明一个数组,然后再决定它的长度或更改其长度。

那么有谁知道如何根据函数中设置的变量声明长度的全局数组的另一种解决方案?

如有任何反馈,我们将不胜感激。如果您投赞成票或反对票,请告诉我原因,以便我可以在以后的问题中改进。

最佳答案

您可以使用动态内存分配来执行此任务。看mallocfree 。下面是全局结构数组上动态内存分配的简单示例:

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

typedef struct _MyStruct
{
    int a;  
    int b;
} MyStruct;

MyStruct *g_Array = NULL;

void populatearray(MyStruct *array, int length)
{
    int i;
    for(i = 0; i < length; i++)
    {
        array[i].a = i;
        array[i].b = i;
    }
}

void printstructs(MyStruct *array, int length)
{
    int i;
    for(i = 0; i < length; i++)
    {
        printf("array[%d].a = %d\narray[%d].b = %d\n\n", i, array[i].a, i,  array[i].b);
    }
}

int main()
{
    g_Array = malloc(50 * sizeof(MyStruct));
    if(!g_Array)
    {
        puts("Malloc failed");
        return 0;
    }
    populatearray(g_Array, 50);
    printstructs(g_Array, 50);
    free(g_Array);
    return 0;
}

关于C - 不可能在函数内声明全局数组。其他解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40595173/

相关文章:

c - IsCharAlphaNumeric && !IsCharAlpha == IsCharNumeric?

c - !!(x) 在 C(尤其是 Linux 内核)中是什么意思?

javascript - 使用 window.prompt() 在 javascript 中创建一个数组

c - 在线程内打印参数

c - 为什么我的 char 数组没有产生越界错误?我故意分配了不足的内存,但我仍然可以分配更大的字符串

c - 为什么这个 C 程序会出现段错误?

arrays - Swift 2 计算数组中的重复项

php - 使用隐藏字段将数组中的搜索结果重新提交回 MySQL 数据库

c++ - c++ 中的 void* 与 vector<uint8_t>

c - 未定义对 '_*' 链接器错误的引用