c - 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));
解决方案
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
推荐阅读
- cloudflare - HTTP/2 服务器两次推送资产下载
- xslt-1.0 - 在 XSLT 模板匹配中使用谓词或层次结构 XPath 获得更好的性能
- ruby-on-rails - 如何在 Ruby 或 ROR 中使用 SHA256 散列编码 RSA-OAEP
- jquery - 复选框验证
- node.js - 在 Windows 上安装环回时出现问题
- wordpress - 删除特殊词 woocommerce 产品标题
- python - 使用 re.finditer 不会返回所有匹配项
- r - 如何用R从字符执行代码?
- excel - 如何使用变量单元格引用在不同的工作簿之间链接它们(变量:工作表名称)
- c# - Unity - 完成关卡时的意外行为