这是我的代码:
typedef struct{
char name[64];
} Cat;
Cat createCat(char name[64]) {
Cat newCat;
newCat.name = name;
return newCat;
}
它编译时出现以下错误消息:
从类型'char *'分配给类型'char [64]'时不兼容的类型
我在这里做错了什么?
这是我的代码:
typedef struct{
char name[64];
} Cat;
Cat createCat(char name[64]) {
Cat newCat;
newCat.name = name;
return newCat;
}
它编译时出现以下错误消息:
从类型'char *'分配给类型'char [64]'时不兼容的类型
我在这里做错了什么?
哎呀。您正在从函数返回一个自动(基于堆栈的)变量。当堆栈帧被弹出并且内存消失时,这将可怕地消失。您需要动态分配Cat
结构并将name
数据复制到其中。free()
当你完成记忆时, 别忘了打电话。
Cat *createCat(char name[64])
{
Cat *tmpCat;
tmpCat=malloc(sizeof(Cat));
strncpy(Cat.name,name,64); // <- or 63 to make sure name is NULL-terminated
return tmpCat;
}
您的代码有两个错误。首先是您在堆栈上分配内存。每当您声明这样的变量时:
int hello = 5;
char test;
Cat newCat;
您正在堆栈上分配内存。一旦函数返回,该内存就会被释放。为了使某些东西更永久,您需要使用 malloc 函数在堆中手动分配内存。此内存将保持有效,直到您稍后通过调用释放它free()
。另外,你需要用来strncpy()
复制字符串,不能简单地复制指针。
Cat* createCat(char* name)
{
Cat* newCat = malloc(sizeof(Cat));
if(!newCat)
{
printf("Error allocating memory for cat\n");
exit(-1);
}
//copy in the string, leave a null terminator on the string
strncpy(newCat.name, name, 63);
newCat.name[63] = '\0';
return newCat;
}