我有一个问题,谷歌搜索后无法弄清楚如何做到这一点。 我定义了一个struct并用于分配一个内存块4对齐。
typedef struct
{
unsigned int param_len;
char param[1]; /* variable size array - param_len bytes */
/* Up to 3 pad bytes follow here - to make the whole struct int aligned. */
} test_t;
test_t test;
test.param_len = 5; /* set param_len = 5 */
int alloc_len = ((test.param_len % 4) + 1) * 4; /* 8 for int aligned */
unsigned char *block = malloc (alloc_len); /* allocate 8 bytes */
如何将参数分配给8字节内存块,如下图所示?
+------------+
| param_len | int aligned
| param[1] | 8 bytes
| |
+------------+
如果我这样做:
&test.param[0] = block;
gcc抱怨error: lvalue required as left operand of assignment
如果我这样做:
test.param = block;
gcc抱怨error: assignment to expression with array type
任何人都可以帮我解决这个问题吗?提前谢谢。
编辑:
我真正的问题是如何编写代码以将一块内存分配给变量param 1,然后通过套接字发送测试。所以我尝试使用&test.param[0] = block;
,但gcc抱怨lvalue required
。
解决方案:
在问我的同学Daniel后,他使用另一个apporach,然后为我写了一个测试代码sample_alloc.c。这就是我真正想要的。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
unsigned int param_len;
char param[1]; /* variable size array - param_len bytes */
/* Up to 3 pad bytes follow here - to make the whole struct int aligned. */
} test_t;
int main() {
int param_len=5;
int alloc_len = sizeof(unsigned int) + ((param_len % 4) + 1) * 4; /* 8 for int aligned */
unsigned char *block = malloc (alloc_len); /* allocate 4 + 8 bytes */
test_t *p=(test_t *)block;
p->param_len = param_len;
memcpy(p->param ,"Hello", 6);
printf("%d %s\n", p->param_len, p->param);
}
谢谢,丹尼尔!