2013-03-20 48 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