[英]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.