c - 如何分配内存并用指向二维数组的指针填充结构

标签 c pointers multidimensional-array struct malloc

我需要为带有指向二维字符数组的指针的结构分配足够的内存。然后填充结构体

struct Dataset
{
    int size;
    char (*items)[][MAX_STRING_LENGTH];
};

我尝试仅为结构体和二维数组分配内存,如下所示

struct Dataset * dataset = malloc( sizeof (Dataset) + (2 * sizeof(char[2][15])) )

然后像这样填充二维数组,但我无法做到

strcpy((*dataset->items)[0][0], "HELLO WORLD");

最佳答案

让我们了解 char (*items)[][MAX_STRING_LENGTH]; 是什么。

它是指向 MAX_STRING_LENGTH 字符数组的指针

因此,item 将需要 4 或 8 个字节,具体取决于您的平台。

无论您在 + 符号之后分配什么,都是浪费:

struct Dataset * dataset = malloc( sizeof (Dataset) **+** (2 * sizeof(char[2][15])) )

将其更改为:

struct Dataset * dataset = malloc( sizeof ( struct Dataset));

现在您需要将指针item指向正确的某个位置,

因此分配内存并指向它:

数据集->item = malloc(sizeof(char[2][MAX_STRING_LENGTH]));

现在您有 item 指向有效内存。请使用它。

//-------------------------------------------------------- ---------------

不是答案: 我坚信你的结构声明本身是有缺陷的。如果您可以发布想要实现的目标,那么它将很有帮助。

关于c - 如何分配内存并用指向二维数组的指针填充结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54702701/

相关文章:

python - 如何切片 2D Python 数组? : "TypeError: list indices must be integers, not tuple" 失败

c# - .NET C# - 数组中不同数组的数量

c - 如何在 C 中修剪字符串中的空格?

android - GCC 6 移位溢出错误,

c - 冒泡排序函数中另一个数组的指针数组 (C)

c - 数组、指针地址值混淆

c - 查找字符串中字符串分隔符的数量

ios - 转发 UIAlertView 的可变参数

c - 链表、指针和节点

c - 使用指针的 3d 数组