c - 字符串的 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;
}
我的问题是:
.key & .value 的值是否存储在 malloc 的分配中?如果是,malloc 为 *value 的值初始化了多少个字符,因为它是一个尚未设置大小的字符串?如果不是, .key & .value 存储在哪里(我猜 malloc 只是保存指向这些值对的指针)?
在将数组放入结构时指定数组的最大大小(即 char value[n])是否是一种好习惯,或者这对编码器来说是可选的?
提前谢谢你。从 python 迁移到 c 有很多不学习的地方,但我对学习 c 感到非常兴奋!:P
解决方案
您的结构将始终具有相同的大小:sizeof (int) + sizeof(char *)
因为您的结构只存储value
. 如果要为字符串分配内存,则必须 malloc kv[n].value
。
推荐阅读
- linux - awk 重命名了一些文件,并留下了一些要重命名的文件
- python - 如何对dict中的值求和?蟒蛇,烧瓶
- ios - 如何使用 ios 谷歌日历中的链接添加事件
- python - Python,列表到 Json
- ios - 需要为使用 Swift Ionic 的目标正确配置 Swift 语言版本
- python - 使用递归(描述符协议?)从反序列化的 JSON 动态创建 Python 对象
- get - Google Cloud Storage JSON REST API - 获取子目录中的对象
- javascript - 如何在可移动列表框上显示工具提示
- javascript - 如何判断 html5 音频对象何时完成加载媒体
- linux - bash "test -r" 给 cd 太多参数