如何从文件中读取特定的行

问题描述:

我已经设法将我的文件中的所有行读取到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]); 
+0

完美,非常感谢你cnicutar和约翰3136你的整洁的建议。 – user999 2012-04-26 08:02:36

+0

在'char buffer'和'char line'的定义中使用了哪些理智/最优化的默认值/值? 'numLines'和'colsPerLine'来自哪里? – 2014-04-13 01:57:36

一点你可以使用查找指针移动光标到行没有。然后应用阅读线。 希望它能起作用。

您每次都在复制指针。所以最后,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