我有一个这样的 C 结构:
typedef struct ip_esp_private { /* keep track of things privately */
u_int32_t type;
u_int32_t ivlen;
u_int32_t icvlen;
u_int32_t keylen; /* length of "Encryption key */
u_int32_t akeylen; /*length of authn key */
// u_int32_t key[0]; /* key itself */
// u_int32_t akey[0]; /*authn key itself */
u_int32_t *key; /* as suggested */
u_int32_t *akey; /* as suggested */
} esp_private;
现在问题应该很明显,当我尝试写入 key 时,akey 将被覆盖。
我不确定如何保护它???
keylen
和 akeylen
提供 key
和 akey
数组的长度,整个结构将在运行时填充时间。
请提供一些建议。
编辑:
是的... u_int32_t 是一个 typedef,所以不必为此烦恼
我已将零长度数组更改为上面编辑的指针。这就是我需要填写结构的方式..
case 'k': /* Key */ length = stringargument(arg, &temp); priv->keylen = length; priv->key=malloc(priv->keylen * sizeof(u_int32_t)); /*as suggested added this step*/ /*as suggested commented this step*/ priv = (esp_private *)realloc(priv, sizeof(esp_private) + length); memcpy(priv->key, temp, priv->keylen); pack->private = priv; pack->modified |= ESP_MOD_KEY; break; case 'K': /* Authentication Key */ length = stringargument(arg, &temp); priv->akeylen = length; priv->akey=malloc(priv->akeylen * sizeof(u_int32_t)); /*as suggested added this step*/ /*as suggested commented this step*/ priv = (esp_private *)realloc(priv, sizeof(esp_private) + length); memcpy(priv->akey, temp, priv->akeylen); pack->private = priv; pack->modified |= ESP_MOD_AKEY;
但没有解决..可能没有仔细重新分配,请也对这个编辑提出建议。
编辑 2:
即使在按照建议对 realloc
进行评论之后,它仍然无法正常工作。key
和 akey
应该在命令行,但它们采用了一些随机值。这里还有一些问题需要注意。
请帮助我,因为整个项目都因为这一小段代码中的一个微小错误而陷入困境。很快就需要它......
最佳答案
那么,在创建 esp_private< 时,你不能只将
结构?key
和 akey
作为指针,并为它们分配 malloc
内存吗?/
typedef struct ip_esp_private {
u_int32_t type;
u_int32_t ivlen;
u_int32_t icvlen;
u_int32_t keylen;
u_int32_t akeylen;
u_int32_t *key; /* change */
u_int32_t *akey; /* change */
} esp_private;
void esp_private_init(esp_private *ep, /* maybe some args here for type, ivlen, etc */
u_int32_t *key, u_int32_t keylen, u_int32_t *akey, u_int32_t akeylen)
{
/* maybe set up type, ivlen, etc if neccesary */
ep->keylen = keylen;
ep->key = malloc(keylen * sizeof(u_int32_t));
/* copy argument key into ep->key */
ep->akeylen = akeylen;
ep->akey = malloc(akeylen * sizeof(u_int32_t));
/* copy argument akey into ep->akey */
}
关于c - 如何在 C 中的同一结构中使用两个可变长度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7870527/