>我在typedef结构中有一个char数组,它太大了(大约260k)
#define LENGTH 260000
typedef struct {
int longSize;
char hello[LENGTH ];
} p_msg;
我想在这个字符数组上使用malloc,如下所示:
typedef struct {
int longSize;
char * hello= malloc(sizeof(char));
} p_msg;
但它给了我错误:
error: expected ':', ',', ';', '}' or '__attribute__' before '=' token
如何对字符数组进行 malloc
?不能从结构定义中调用函数。 相反,您应该简单地保留第一个结构定义,其中包含大字符串,然后在要创建一个时执行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;
}
您需要使用指针类型,请考虑以下代码:
#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;
}