1
typedef struct {
    char * array[10];
} List;

int main(void) {
    List input;
    input.array = (char **)malloc(10 * sizeof(char));
    if (input.array == NULL)
        exit(EXIT_FAILURE);

    for (i = 0; i < 10; i++) {
        input.array[i] = (char *)malloc(10 * sizeof(char));
        if (input.array[i] == NULL)
            exit(EXIT_FAILURE);
    }
}

我正在尝试初始化一个由 10 个字符指针组成的数组,每个指针指向一个长度为 10 的不同字符串。

我从 gcc 收到以下错误:

incompatible types when assigning to type ‘char *[10]’ from type ‘char **’

我对 malloc 的调用一定不正确,但怎么会这样呢?

4

2 回答 2

8

char *array[10]声明一个包含 10 个指针的数组char。这个数组不需要malloc存储;它嵌入在struct List. 因此,第一次调用malloc是不必要的,之后立即进行检查也是如此。

malloc对循环内部的调用以及之后的检查是正确的。

此外,在 C 中,不要强制转换 ; 的返回值malloc。它实际上可以隐藏错误。

此外,根据定义sizeof(char)是 1 ,因此您永远不应该写它。

struct List
{
    char *array[10];
};

int
main(void)
{
    struct List input;
    for (int i = 0; i < 10; i++)
    {
        input.array[i] = malloc(10);
        if (!input.array[i])
            return EXIT_FAILURE;
    }
    /* presumably more code here */
    return 0;
}
于 2013-07-10T18:24:56.800 回答
0

malloc(10 * sizeof(char*));

您必须分配 10 个字符指针(4 字节/8 字节)而不是 10 个字符(1 字节)

//编辑:我忽略了结构。第一个 malloc 不是必需的。看另一个答案。

于 2013-07-10T18:25:42.970 回答