分配内存块并为char数组分配发送套接字的内存块

时间:2016-12-02 04:43:40

标签: c arrays pointers memory

我有一个问题,谷歌搜索后无法弄清楚如何做到这一点。 我定义了一个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);
}

谢谢,丹尼尔!

0 个答案:

没有答案