C语言 使用 malloc 初始化字符指针数组


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的呼吁一定不正确,但如何正确呢?

char *array[10]声明

了一个包含 10 个指向char的指针的数组。 不必为此阵列malloc存储;它嵌入在struct List 中。 因此,第一次调用malloc是不必要的,紧接着的检查也是如此。

在循环内malloc并在循环后检查的调用是正确的。

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

此外,根据定义,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;
}

malloc(10 * sizeof(char*((;

您必须分配 10 个字符

指针(4 字节/8 字节(而不是 10 个字符(1 字节(

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

相关内容

  • 没有找到相关文章