假设我想阅读一个页面列表 最多 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/