首页 > 解决方案 > 字符串的 malloc 分配

问题描述

仍然是试图掌握内存分配的初学者。在下面的代码中

#include <stdio.h>
#include <stdlib.h>

typedef struct key_value
{
    int key;
    char *value;
} key_value;

int main(void)
{
    int keys = 2;
    key_value *kv = malloc(sizeof(key_value) * keys);

    kv[0].key = 1;
    kv[0].value = "Value of Key 1";

    kv[1].key = 2;
    kv[1].value = "Value of Key 2";

    printf("Key = %d\nKey value = %s\n", kv[0].key, kv[0].value);
    printf("Key = %d\nKey value = %s\n", kv[1].key, kv[1].value);


    free(kv);
    return 0;
}

我的问题是:

  1. .key & .value 的值是否存储在 malloc 的分配中?如果是,malloc 为 *value 的值初始化了多少个字符,因为它是一个尚未设置大小的字符串?如果不是, .key & .value 存储在哪里(我猜 malloc 只是保存指向这些值对的指针)?

  2. 在将数组放入结构时指定数组的最大大小(即 char value[n])是否是一种好习惯,或者这对编码器来说是可选的?

提前谢谢你。从 python 迁移到 c 有很多不学习的地方,但我对学习 c 感到非常兴奋!:P

标签: cmalloc

解决方案


您的结构将始终具有相同的大小:sizeof (int) + sizeof(char *)因为您的结构只存储value. 如果要为字符串分配内存,则必须 malloc kv[n].value


推荐阅读