在typedef结构中声明的malloc char数组

时间:2016-06-27 01:22:25

标签: c malloc

我在typedef结构中有一个char数组,它太大了(大约260k)

#define LENGTH 260000

typedef struct {
   int longSize;
   char hello[LENGTH ];
} p_msg;

我想在这个char数组上使用malloc,如下所示:

typedef struct {
   int longSize;
   char * hello= malloc(sizeof(char));
} p_msg;

但它给了我错误:

error: expected ':', ',', ';', '}' or '__attribute__' before '=' token

我如何malloc char数组?

2 个答案:

答案 0 :(得分:2)

您无法在结构定义中调用函数。您应该简单地保留第一个结构定义,其中包含大字符串,然后在您想要创建一个结构时执行malloc(sizeof(p_msg))

或者您可以将指针放在里面,并记住每次创建结构实例时都使用malloc()的结果初始化该指针。

如果你有一个函数通过指针获取结构,你可以这样做:

int extMsg(p_msg *msgBuffer)
{
    msgBuffer->longSize = 12;
    msgBuffer->hello = malloc(12);
    snprintf(msgBuffer->hello, 12, "hello %d", 42);
    return 0;
}

答案 1 :(得分:0)

您需要使用指针类型,请考虑以下代码:

#include <stdlib.h>
#include <string.h>

typedef struct {
    int longSize;
    char * hello;
} p_msg;

int main()
{
    p_msg msg;
    //zeroing memory to set the initial values
    memset(&msg, 0, sizeof(p_msg));
    //storing the size of char array
    msg.longSize = 260000;
    //dynamically allocating array using stored value
    msg.hello = (char *)malloc(msg.longSize);

    //using msg struct in some function
    int retVal = someFunc(&msg);


    //free hello array after you don't need it
    free(msg.hello);
    msg.hello = 0;
}