从不兼容的指针类型C分配

Jon*_*ono 2 c pointers

假设我想在最多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)

unw*_*ind 5

切勿转换malloc()C中的返回值.它隐藏了实际上对你有帮助的编译器警告,而且它永远不必要,所以它只会增加混乱.你应该使用:

pageName = malloc(nPages * sizeof *pageName);
Run Code Online (Sandbox Code Playgroud)

请注意这是如何免于重复的类型名称pageName.这里,sizeof *pageName表示"指向的对象的大小pageName",即"字符指针的大小".你应该经常期待一个sizeof表达式作为malloc()参数.

此外,sizeof (char)C中始终为1,因此可以说,特定表达式会增加更多的混乱,而不是有助于使代码安全.