[英]Malloc in C Programming - incompatible pointer types
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));
ptr->Name
是char *
类型。
ptr->Name = (struct rec*)malloc(sizeof(struct rec))
将malloc()
的返回值显式转换为struct rec *
。 struct rec *
不能隐式转换为char *
,因此对ptr->Name
的赋值无效。
如果您的代码中有前面的#include <stdlib.h>
, ptr->Name = malloc(sizeof(struct rec))
起作用,因为malloc()
返回void *
,并且void *
可以隐式转换为任何指针类型,包括到char *
。 如果没有前面的#include <stdlib.h>
(或提供malloc()
声明的另一个头文件,转换也是无效的。
void *
是 C 中唯一可以隐式转换为另一种指针类型的指针类型。 因此,您的两个选项之间存在差异。
malloc()
的参数也是错误的,即在大多数情况下,不应使用sizeof(struct rec)
动态分配char
数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.