2011-02-13 499 views
0

我遇到以下代碼的問題。指針問題

int main (int argc, const char * argv[]) { 

#define MAXCHARACTERS 10 
#define MAXNUMBERS 2 

char buffer[MAXCHARACTERS]; 

numberOfStructs = 0; 

allocSize = 10; 
array = malloc(allocSize * sizeof(StructItem)); 
dataLink *link; 

do 
{ 
    Album *tempStruct; 

    fgets(&(*tempStruct->firstField),MAXCHARACTERS, stdin); 
    fgets(&(*tempStruct->secondField), MAXCHARACTERS, stdin); 
    fgets(buffer, MAXNUMBERS, stdin); 
    sscanf(buffer, "%d", &(tempStruct->thirdField) == 1); // line 26 

    link = List(&tempStruct); 

    array[numberOfStructs] = (*tempStructs); 
    numberOfStructs += 1; 

    array = reAllocArray(&array, &allocSize, numberOfstructs); 
} 
while(link->newStruct != NULL); 

printList(&array, numberOfStructs); 
freeArray(&array, numberOfStructs); 
} 

我得到警告如下

/main.c:26:警告:指針和整數之間的比較 警告:從兼容的指針類型傳遞 '列表' 的參數1

我收到了一些「傳遞參數1」的錯誤消息。

我在做什麼這些指針錯了?

感謝

+2

'Album'的類型是什麼?或者說,你是如何定義這種類型的? – 2011-02-13 08:50:14

回答

1
Album *tempStruct; 
fgets(&(*tempStruct->firstField),MAXCHARACTERS, stdin); 

tempStruct只是一個指針,你不應該任何存儲在該指針偏移

&(*tempStruct->firstField) // or just tempStruct->firstField since &* is just cancellation 

我不知道如何代碼的作品,但離我的知識,我可以看到使用tempStruct每一行是訪問衝突無一例外在

link = List(&tempStruct); 

&(tempStruct->thirdField) == 1 

在所有情況下,最可能都是FALSE,因爲它只是指針,它可能是偶然的。

2

在我看來,你是濫用sscanf,要傳遞給它的第三個參數是從一個地址和號碼1.什麼是你想實現有之間的比較合乎邏輯的結果?

0

您缺少多個類型定義。

例如,numberOfStructs = 0;應該是int numberOfStructs = 0;這同樣適用於allocSize,arraydatalink

如果您只發布您的代碼片段,並且您的原始代碼不是有這些問題,請告訴我們哪一行代碼導致錯誤。行號可能不正確。

+0

違規行在代碼中有//註釋。 – 2011-02-13 09:01:09

0

也許你剛剛複製的代碼也測試scanf返回1?然後你得到了你的()錯誤。實際上,您應該將其寫入if條款並測試成功。