我正在尝试创建ADT,但是当我创建一个返回char类型的函数时,该程序无法正常工作。这是ADT:
typedef struct{
int ID;
char Writer[100];
char Title[100];
long Year;
}Book;
函数是:
char GetTitle(Book B){
return B.Title;
}
我用它来获取函数的返回值:
printf("%s",GetTitle(B));
如何返回Char类型?
答案 0 :(得分:2)
period
请注意,这只是返回指向书名的指针。因此,当销毁书籍时,指针将变为无效。您无法返回整个标题,因为您无法返回数组。如果要在得到指针后复制字符串(因此在销毁书籍后它仍然有效),请使用char* GetTitle(Book *B){
return B->Title;
}
:
strdup
编辑:如果Book* B = malloc(sizeof(Book));
// [...] initialize the book...
char *title = strdup(GetTitle(B));
free(B);
printf("%s",title);
free(title);
不可用,请检查this answer的实现。
答案 1 :(得分:1)
您绝对必须阅读编译器传递的警告:确保它告诉您不能从函数堆栈中返回地址。它只是偶然的,因为函数返回后该内存无效。您必须继续使用指针和引用。尝试将char GetTitle(Book B);
更改为char* GetTitle(Book *B);
,如下所示:
#include <string.h>
#include <stdio.h>
typedef struct {
int ID;
char Writer[100];
char Title[100];
long Year;
} Book;
char* GetTitle(Book *B) {
return B->Title;
}
int main() {
Book B;
strcpy(B.Title, "Title");
printf("%s\n", GetTitle(&B));
return 0;
}