请问如何malloc字符串数组呢?(是字符串数组不是字符串)

网上没找到答案,可能这个问题太简单了,大概我理解的写法就是这样
char* a[20];
a=(char*[20])malloc(100*sizeof(char));

/////
追问:不好意思我之前的描述有些问题(语文老不好了),想问的是字符串数组不是字符串,就是类似于一个字符串的数组,char *a[20]应该是如何取malloc的呢

char *a[20];
int i;
const int len=4;
for (i=0;i<20;i++) {
 a[i]=(char *)malloc(len);
 strcpy(a[i],"123");
 printf("a[%d]:%s\n",i,a[i]);
 free(a[i]);
}


(char*)malloc(sizeof(char))就是给指针申请真正用来存储的空间,默认是一个char字符大小
(char*)malloc(sizeof(char)*10)给指针申请10char类型大小的空间。

char a[20]; <===> char *a = (char *)malloc(sizeof(char)*20);
                  char *a = new char[20];

malloc是按照数据类型来申请空间的,char[20]当然是按照char来申请空间,不用写成char[20],而且你不用一次性申请100个这样的空间。你申请空间一般是想要链表插入数据,用for循环一个个申请就好了,这样可以节约空间资源,稍微提高运行速率