首页 > 解决方案 > C 编程中的 Malloc - 不兼容的指针类型

问题描述

ptr->Name = (struct rec*)malloc(sizeof(struct rec)); 有什么区别?来自 ptr->Name = malloc(sizeof(struct rec)); 为什么每当我在 malloc 中包含 (struct rec*) 时都会收到错误消息。

struct rec {
 char *Name;
}emp[100];

int main() {

int x;
int i;

struct rec *ptr = NULL;
ptr = emp;

printf("Enter Number of Clients: ");
scanf("%d", &x);
getchar();

for(i=0; i!=x; i++)
{
printf("Enter Name: ");
//I'm receiving an error whenever I add this
ptr->Name = (struct rec*)malloc(sizeof(struct rec));

//Code below is working
ptr->Name = malloc(sizeof(struct rec));

标签: c

解决方案


ptr->Name是类型char *

ptr->Name = (struct rec*)malloc(sizeof(struct rec)) 将返回值显式转换malloc()为 a struct rec *。Astruct rec *不能隐式转换为 a char *,因此对的赋值ptr->Name无效。

#include <stdlib.h>如果您的代码中有前面,则可以ptr->Name = malloc(sizeof(struct rec)) 工作,因为malloc()returnvoid *和 avoid *可以隐式转换为任何指针类型,包括转换为 a char *。如果没有前面的#include <stdlib.h>(或另一个提供 声明的标头malloc(),则转换也是无效的。

void *是 C 中唯一可以隐式转换为另一种指针类型的指针类型。因此,您的两个选项之间的差异。

的参数malloc()也是错误的,即在大多数情况下 sizeof(struct rec)不应该用于动态分配 的数组。char


推荐阅读