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不是必需的。请参阅另一个答案。