2012-02-16 68 views
-3

我有一個結構如下傳遞數組元素(結構)的功能

typedef struct _someStruct 
{ 
int V1; 
char V2[10]; 
} SomeStruct; 

SomeStruct *struct; 
int elemNo = FillStruct(&struct); 
for (i=0; i<elemNo; i++) 
    PrintElem(&struct[i]); 

功能PrintElem是如下:

void PrintElem(SomeStruct *s) 
{ 
    printf("\n\tV1 : %d\n\tV2 : %s\n", s->V1, s->V2); 
} 

代碼在環路出故障時從2'n或3' rd元素。

有什麼不對的建議嗎?

編輯: 其實PrintElem是(我做了這樣的reasoin的事實是,真正的結構有名稱很長的約30場,所以我把它使代碼可讀性):

void PrintElem(SomeStruct *s) 
{ 
    printf(
     "\n\tV1 : %d" 
     "\n\tV2 : %s\n", 
     s->V1, s->V2); 
} 

我沒有想到這可以有所作爲,但它確實(實際上是問題的關鍵 - 見我自己的答案) 我只是發佈它希望它會幫助以後的人。

感謝所有爲所有的建議和您的時間

+4

您是希望我們相信'SomeStruct *結構;'編譯?發佈真實的代碼。你使用C和C++嗎?選一個。 – cnicutar 2012-02-16 19:05:11

+0

你可以發佈FillStruct的功能嗎? – vmpstr 2012-02-16 19:05:20

+1

這不可能是你真正的代碼。你有'v2'而不是'V2',它不會編譯。 – 2012-02-16 19:05:36

回答

0

PrintElem的正確形式應該是

void PrintElem(SomeStruct *s) 
{ 
printf(
    "\n\tV1 : %d"\ 
    "\n\tV2 : %s\n", 
    s->V1, s->V2); 
} 

感謝大家的幫助

1

其實SomeStruct是變量不是類型的名稱。我建議你分裂的typedef和變量定義在兩行:

struct _someStruct 
{ 
    int V1; 
    char V2[10]; 
}; 

_someStruct *struct; 
int elemNo = FillStruct(&struct); 
for (i=0; i<elemNo; i++) 
    PrintElem(&struct[i]); 


void PrintElem(_someStruct *s) 
{ 
    printf("\n\tV1 : %d\n\tV2 : %s\n", s->V1, s->v2); 
} 

另外,還要確保在FillStruct你分配類型_someStruct的數組,而不僅僅是一個元素。否則,這根本不會奇怪。

2

這其中有一些問題,但讓我們嘗試將它們

typedef struct _someStruct 
    { 
    int V1; 
    char V2[10]; 
    } SomeStruct; 

    /* assuming you create an array of pointers to structures allocated from heap 
     and then return the data to the struct1 double pointer */ 
    SomeStruct ** struct1; 
    int elemNo = FillStruct(struct1); 
    for (i=0; i<elemNo; i++) 
     PrintElem(struct[i]); 

    void PrintElem(SomeStruct *s) 
    { 
     printf("\n\tV1 : %d\n\tV2 : %s\n", s->V1, s->v2); 
    } 

希望這有助於理清,如果你能澄清FillStruct,這將有助於。

+0

謝謝,我正在嘗試這種方法,但得到了同樣的問題。 – bzamfir 2012-02-19 19:19:53

1

從這些線路:

SomeStruct *struct; 
int elemNo = FillStruct(&struct); 

我假設你想FillStruct功能也爲這些結構分配內存。你的問題很可能在這個函數的主體中(你正在分配太小的內存塊或者你返回不正確的值)。

FillStruct功能看起來是這樣的:

int FillStruct(SomeStruct **s) 
{ 
    *s = malloc(sizeof(SomeStruct) * 10); 
    // fill members of these structs 
    return 10; 
} 

還要注意的是struct是一個關鍵字,你不能用它作爲變量的名稱。

+0

是的,FillStruct完成你所說的事情,但沒關係。與printf中的格式字符串有關的問題 – bzamfir 2012-02-19 19:24:06