2012-04-26 91 views
0

我已經設法將我的文件中的所有行讀取到char數組,但是當我想要讀取特定的行(即下面的示例中的行254)時,我總是將數據讀入我的文件中的最後一行。任何想法是什麼問題。謝謝。 下面是代碼樣本:如何從文件中讀取特定的行

while (fgets(line,2000,fp)!=NULL 
{ 
readData [n] = line; 
n++; 
} 
printf ("print line after %s\n",readData [254]); 

回答

1

我猜「READDATA」是char *的數組中,所以當你說你readData[n] = line在陣列始終設置爲相同的數據的「緩衝」。

你需要的東西更像

char buffer[numLines][colsPerLine]; 
char line[colsPerLine]; 
while (fgets(line,2000,fp)!=NULL 
{ 
    strcpy(buffer[n], line); // copy contents of line into the buffer 
    n++; 
} 
printf ("print line after %s\n",buffer[254]); 
+0

完美,非常感謝你cnicutar和約翰3136你的整潔的建議。 – user999 2012-04-26 08:02:36

+0

在'char buffer'和'char line'的定義中使用了哪些理智/最優化的默認值/值? 'numLines'和'colsPerLine'來自哪裏? – 2014-04-13 01:57:36

-1

一點你可以使用查找指針移動光標到行沒有。然後應用閱讀線。 希望它能起作用。

2

您每次都在複製指針。所以最後,readData陣列的每個條目都將指向相同的內存。嘗試複製數據代替:

readData[n] = strdup(line); 

並記住要完成時free。如果你沒有strdup或不想使用它:

readData[n] = malloc(strlen(line) + 1); 
strcpy(readData[n], line); 
+0

嗨Cnicutar,我在哪裏使用免費(readData [n])請。就在我關閉文件之前?或whithin循環。謝謝 – user999 2012-04-26 08:24:38

+0

@ user999當你決定「我不再有'readData [n]'' – cnicutar 2012-04-26 08:25:37

+0

這個偉大的,再次感謝你,我打電話'免費'我還有一個問題,如果沒關係。從readData [254]行有4個參數是這樣的:1.56 2.47 5.69 3.48。我需要單獨訪問每個這些參數,即數組[0]應該返回1.56作爲浮點數,非常感謝您的建議。 – user999 2012-04-26 08:48:22