【问题标题】:Postal code using structures使用结构的邮政编码
【发布时间】:2015-11-25 22:24:51
【问题描述】:

我正在尝试创建一个存储邮政编码的结构,但我收到此错误:“c:15:11: error: assignment to expression with array type h->array = malloc(sizeof(PostalCode)*size);"

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

typedef struct PostalCode
{
    int size;
    char *array[5];
} PostalCode;

void main()
{
    int size = 5;
    PostalCode *h = malloc(sizeof(PostalCode));
    h->size = size;
    h->array = malloc(sizeof(PostalCode)*size);
}

【问题讨论】:

  • 既然array是一个指向字符的指针数组,而不是PostalCode,那你为什么要在分配时乘以sizeof(PostalCode) * size呢?

标签: c arrays pointers struct


【解决方案1】:

该结构已经包含一个由 5 个指针组成的数组作为其数据成员

typedef struct PostalCode
{
    int size;
    char *array[5];
    ^^^^^^^^^^^^^^
} 

所以你不需要分配它。

如果你想使用这个数组来存储例如 5 个 PostalCode 类型的对象 (虽然在这种情况下,如果数组的类型为PostalCode *array[5] 会更好)然后你可以写

for ( int i = 0; i < 5; i++ )
{ 
    h->array[i] = malloc( sizeof( PostalCode ) );
}

【讨论】:

    【解决方案2】:

    你不需要分配array,它是一个数组,而不是一个指针。但是您确实需要为每个元素分配内存。

    for (int i = 0; i < 5; i++) {
        h->array[i] = malloc(size);
    }
    

    【讨论】:

      最近更新 更多