我有这个结构

Cheltuieli * creeaza(int numar_apartament,int suma,char * tipul){
    Cheltuieli * cheltuiala=malloc(sizeof(Cheltuieli));
    cheltuiala->numar_apartament=numar_apartament;
    cheltuiala->suma=suma;
    cheltuiala->tipul=tipul;
    return cheltuiala;
}


应该表现得像一个类,我有这种方法

char* get_tipul(Cheltuieli c){
    char * tip_de_returnat=strdup(c.tipul);
    return tip_de_returnat;
}


应该是提普尔的“吸气者”

我有一个通用容器

typedef void* Elements;

typedef struct{
    Elements * Element;
    int lungimea;
    int capacitatea;

} vector_dinamic;


存储元素并像动态矢量一样工作,我的元素是Cheltuieli

问题在这里,我有一个应该打印动态矢量所有元素的函数,它正确打印了“ numar_apartament”和“ suma”,但在“ tipul”处却出现了颠倒的“?”。

void afiseaza(controller * ctr){
    int i;
    Cheltuieli *c;
    for (i=0;i<ctr->repo->v->lungimea;i++)
    {
        c=ctr->repo->v->Element[i];
        printf("Numar apartament: %d\n",get_numar_apartament(*c));
        printf("Suma: %d\n",get_suma(*c));
        printf("Tipul: %s\n",get_tipul(*c));

    }


有人可以帮我吗?谢谢!

最佳答案

“ tipul”来自“ Cheltuieli * creeaza(int numar_apartament,int suma,char * tipul)”。当您调用creeaza()时,您作为“ tipul”传递了什么?例如,如果将函数本地char数组传递给creeaza,则在执行printf时,本地char数组可能已被释放。因此,您应该检查将哪种字符串作为“ tupil”传递给creeaza()。

顺便说一下,对于此函数“ char * get_tipul(Cheltuieli c)”,您最好将其更改为:

char* get_tipul(const Cheltuieli *c)


这样可以避免创建c的临时副本。

10-04 21:57