簡體   English   中英

C 編程中的 Malloc - 不兼容的指針類型

[英]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->Namechar *類型。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM