错误:一个函数无法在C中返回char类型

时间:2018-10-05 07:53:41

标签: c data-structures

我正在尝试创建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类型?

2 个答案:

答案 0 :(得分:2)

您返回一个char *代替

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;
}