2013-12-14 74 views
-1

我在我的程序的第一步失敗。首先,我需要從文件讀入一個結構數組。我沒有做到這一點 - 我得到了很多錯誤,我感覺我的閱讀語法不正確。一旦我這樣做,我將能夠繼續我的程序。我認爲我必須使用calloc/realloc/free和所有這些奇怪的東西,因爲我的數據文件可能有很長的一組數字。C - 數組,從文件讀取結構數組(calloc realloc免費...)

我的數據文件:

4 5 5 6 
9 
5 7 6 9 
6 5 
1 8 1 2 3 6 5 
1 9 
4 5 5 6 
9 
5 7 6 9 
6 5 
1 8 1 2 3 6 5 
1 9 

它必須讀起來像座標(x,y)的 - 不要緊,這些數字是如何放置 - 我可以/必須跳讀

+3

我不明白文件的格式。你說(x,y)座標,但行有不同數量的數字 – slezica

+0

'calloc'函數返回一個指向一些分配內存的指針,但'Trikamp'沒有被聲明爲一個指針。改爲使用'Struct Trikampiai * Trikamp;'聲明,將其註釋掉。你需要使用'Trikamp-> stuff'而不是'Trikamp.stuff'。 'main'的返回類型應該是'int',而不是'void'。你的代碼縮進也有點怪異。 – 2013-12-14 13:52:10

回答

1

你使用calloc是不正確的。正如赫爾曼在他的評論中指出的那樣,調用calloc會返回一個指向內存塊sizeof(struct Trikampiai)字節長度的指針;你正在存儲一個int指針。此外,您從不使用字符數組buf

嘗試:struct Trikampiai *Trikamp = calloc(1, dydis);,如果你想動態分配內存,或者只是保持struct Trikampiai Trikamp;如果你想自動分配。從我可以告訴你的程序的意圖你混淆了這兩個內存分配的概念(堆棧vs堆)。這是一個很好的資源:What and where are the stack and heap?

Trikamp->xas = sk; VS Trikamp.xas = sk

與前你必須使用->操作符來訪問結構,而後者則需要.運營商,這是我認爲你想要。

你還看到了什麼其他錯誤?

1

您需要一個長度和一個計數索引。兩者在開始時可以設置爲零。在循環中,如果長度等於計數指標,您可以通過一些合理的量增加長度,不能太小,不能過大,並使用增加的長度

if(count==length) { 
    length += delta; 
    trikamp = (struct Trikampiai *)realloc(trikamp, dydis*length); 
} 

您可以訪問調用的realloc的trikamp陣列該結構的字段爲(trikamp+count)->xas或等同於trikamp[count].xas,編譯器將兩者視爲相同。