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

ティプルの「ゲッター」であるべきもの

私は一般的なコンテナを持っています

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 に答える