0

我有这个结构

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

这应该是tipul的“吸气剂”

我有一个通用容器

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

    }

有人可以帮我吗?谢谢!

4

1 回答 1

1

“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 的临时副本。

于 2013-03-20T13:14:51.593 回答