我已經設法將我的文件中的所有行讀取到char數組,但是當我想要讀取特定的行(即下面的示例中的行254)時,我總是將數據讀入我的文件中的最後一行。任何想法是什麼問題。謝謝。 下面是代碼樣本:如何從文件中讀取特定的行
while (fgets(line,2000,fp)!=NULL
{
readData [n] = line;
n++;
}
printf ("print line after %s\n",readData [254]);
我已經設法將我的文件中的所有行讀取到char數組,但是當我想要讀取特定的行(即下面的示例中的行254)時,我總是將數據讀入我的文件中的最後一行。任何想法是什麼問題。謝謝。 下面是代碼樣本:如何從文件中讀取特定的行
while (fgets(line,2000,fp)!=NULL
{
readData [n] = line;
n++;
}
printf ("print line after %s\n",readData [254]);
我猜「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]);
一點你可以使用查找指針移動光標到行沒有。然後應用閱讀線。 希望它能起作用。
您每次都在複製指針。所以最後,readData
陣列的每個條目都將指向相同的內存。嘗試複製數據代替:
readData[n] = strdup(line);
並記住要完成時free
。如果你沒有strdup
或不想使用它:
readData[n] = malloc(strlen(line) + 1);
strcpy(readData[n], line);
嗨Cnicutar,我在哪裏使用免費(readData [n])請。就在我關閉文件之前?或whithin循環。謝謝 – user999 2012-04-26 08:24:38
@ user999當你決定「我不再有'readData [n]'' – cnicutar 2012-04-26 08:25:37
這個偉大的,再次感謝你,我打電話'免費'我還有一個問題,如果沒關係。從readData [254]行有4個參數是這樣的:1.56 2.47 5.69 3.48。我需要單獨訪問每個這些參數,即數組[0]應該返回1.56作爲浮點數,非常感謝您的建議。 – user999 2012-04-26 08:48:22
完美,非常感謝你cnicutar和約翰3136你的整潔的建議。 – user999 2012-04-26 08:02:36
在'char buffer'和'char line'的定義中使用了哪些理智/最優化的默認值/值? 'numLines'和'colsPerLine'來自哪裏? – 2014-04-13 01:57:36