假设我想在最多19个字符的页面列表中读取,例如4(页数)Name1 Name2 Name3 Name4
我试图使用全局2D数组来存储页码和页面名称,我得到一个错误,说从不兼容的指针类型分配...
谢谢
static int nPages;
static char** pageName;
int main(void){
scanf(" %d", &nPages);
pageName = (char *)malloc(nPages*sizeof(char));
for(int i=0; i < nPages ;i++){
pageName[i] = (char *)malloc(20*sizeof(char));
scanf(" %s", pageName[i]);
}
//Free Memory Here of coz.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
切勿转换malloc()C中的返回值.它隐藏了实际上对你有帮助的编译器警告,而且它永远不必要,所以它只会增加混乱.你应该使用:
pageName = malloc(nPages * sizeof *pageName);
Run Code Online (Sandbox Code Playgroud)
请注意这是如何免于重复的类型名称pageName.这里,sizeof *pageName表示"指向的对象的大小pageName",即"字符指针的大小".你应该经常期待一个sizeof表达式作为malloc()参数.
此外,sizeof (char)C中始终为1,因此可以说,特定表达式会增加更多的混乱,而不是有助于使代码安全.