c - 从不兼容的指针类型 C 赋值

标签 c pointers

假设我想阅读一个页面列表 最多 19 个字符的名称,例如4个 (页数) 姓名1 姓名2 姓名3 姓名4

我正在尝试使用全局二维数组 存储页码和页码 名字,我在说赋值时出错 来自不兼容的指针类型...

谢谢

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;
}

最佳答案

Never cast the return value of malloc() in C .它隐藏了实际上可以帮助你的编译器警告,而且它从来都不是必需的,所以它只会增加困惑。你应该使用:

pageName = malloc(nPages * sizeof *pageName);

请注意如何避免 pageName 类型名称的重复。这里,sizeof *pageName的意思是“pageName指向的对象的大小”,即“字符指针的大小”。您应该经常期望 sizeof 表达式作为 malloc() 的参数。

此外,sizeof (char) 在 C 中始终为 1,因此可以说,这个特定的表达式增加了更多的困惑,而不是它有助于使代码安全。

关于c - 从不兼容的指针类型 C 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5965546/

相关文章:

c - 结构体数组的动态值?

C strcpy 函数和 char*

c - 将新的十六进制值重新分配给 Uint32 *

c - 按值将数组传递给函数

calloc() 函数代替 malloc()

c - 生成一个 secret 数字并用 C 猜测它

c++ - 引用标的的删除

c - 如何通过添加指针来修复我的 C 代码?

c - 需要帮助使用 <elf.h>

c - 分割字符串函数的段错误