C 获取无效的初始化器错误

C 获取无效的初始化器错误,c,C,为什么下面的代码会出现“无效初始值设定项错误” #include<stdio.h> #include<malloc.h> int main(){ int i = 2; int j; for(j = i ; j < 20; j++){ char *p[5] = malloc(20 * sizeof(char)); int len = 0; p[0] = 'a'; } retur

为什么下面的代码会出现“无效初始值设定项错误”

#include<stdio.h> 
#include<malloc.h>

int main(){
    int i = 2;
    int j;
    for(j = i ; j < 20; j++){
        char *p[5] = malloc(20 * sizeof(char));
        int len = 0;
        p[0] = 'a';
    }
    return 0;
}
#包括
#包括
int main(){
int i=2;
int j;
对于(j=i;j<20;j++){
char*p[5]=malloc(20*sizeof(char));
int len=0;
p[0]=“a”;
}
返回0;
}

您有一个指针数组,并且只指向它一个指针:

char *p[5] = malloc(20 * sizeof(char));
改用这个:

char *p = malloc(20 * sizeof(char));
如果您确实需要一个指针数组,但只设置其中的第一个指针,那么这应该是您的代码:

char *p[5] = {malloc(20 * sizeof(char))};
(或者,更好的是:
char*p[5]={0};p[0]=malloc(20*sizeof(char));

如果这是您想要的,您必须以不同的方式指定字母“a”-使用
*(p[0])='a'取而代之

此外:您不再释放内存。你应该使用
free(p)
这样做,否则您的程序可能会消耗越来越多的内存

对于小程序来说,这是没有问题的,因为操作系统在程序关闭后会释放内存


但这是一种糟糕的做法,也是许多糟糕软件的原因。

你想做什么呢???@奥利·查尔斯沃思:对不起,伙计。我会像你在下一篇文章中所说的那样提出问题