2013-03-20 61 views
0

我有這樣的結構打印字符串通過指針C發送

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

    } 

有人能幫我嗎?謝謝!

+0

是你的所有字符數組空終止?'\ 0' – Serdalis 2013-03-20 13:07:53

+0

沒有看到全部的程序我不能肯定,但是這是* *可能成爲他們被釋放後習慣串的情況。嘗試從'get_tipul'的'的strdup(tipul)'移動'creeaza'。 – zwol 2013-03-20 13:07:55

+0

我認爲,如果你用英語寫的代碼會讓事情變得更好。 – Yousf 2013-03-20 13:09:19

回答

1

「tipul」 是從 「Cheltuieli * creeaza(INT numar_apartament,INT SUMA,字符* tipul)」。當你打電話給creeaza()時,你作爲「tipul」傳遞了什麼?例如,如果傳遞函數的局部字符數組creeaza,當你這樣做的printf,本地字符數組可能已經被釋放。所以你應該檢查你傳遞給creeaza()的字符串是「tupil」。

順便說一句,這個功能 「的char * get_tipul(Cheltuieli三)」,你最好將其更改爲:

char* get_tipul(const Cheltuieli *c) 

這樣避免創建C的一個臨時副本。

+0

我感動的strdup到creeaza和工作 – JackRobinson 2013-03-20 13:23:54