簡體   English   中英

如何fgets()C中文件的特定行?

[英]How to fgets() a specific line from a file in C?

所以,我試圖找到一種方法來fgets()C中的文本文件中的特定行,以將該行的內容復制到更永久的緩沖區:

基本上,我想知道是否有一種方法可以做到這一點,沒有類似於以下代碼:

FILE *fp;
fp = fopen(filename, "r");

char line[256];
char * buffer;
int targetline = 10;
while( targetline > 0)
{
    fgets(line, 256, fp)
}

buffer =(char*)malloc(sizeof(char) * strlen(line));
strcpy(buffer, line);

所以基本上我不想遍歷文件n-1次只是為了到達第n行...它只是看起來效率不高(而且,這是作業,我需要得到100%哈哈) 。

任何幫助,將不勝感激。

如果您知道每行的長度,可以使用fseek跳到所需的行。

否則,你需要經歷所有行。

除非您了解有關該文件的更多信息,否則無法隨機訪問特定行。 新行由行末字符的存在分隔,並且它們通常可以在任何地方出現。 文本文件不來與地圖索引 ,它會讓你跳到 n 線上。

如果您知道,例如,文件中的每一行都是相同的長度,那么您可以使用隨機訪問來跳轉到特定的行。 如果沒有這種類型的額外知識,你就別無選擇,只能遍歷整個文件,直到達到所需的行。

首先,你的線

buffer =(char*)malloc(sizeof(char) * strlen(line));

寫得更好:

buffer = malloc(strlen(line) + 1);

需要+ 1來為終止' \\0 '字符提供空間; strlen()沒有考慮到這一點。 在C中轉換malloc()的結果不是必需的,並且在某些情況下可以掩蓋錯誤。 根據定義, sizeof(char)是1,因此不需要。

而且你永遠不會改變targetline的值,所以你的循環永遠不會終止。

但是在回答你的問題時,如果你有一個文本文件並且想要讀取它的第N行,你必須閱讀並跳過前面的第一行N-1行。 (可以設置一個單獨的索引,但是創建索引需要通過文件讀取,並且在文件更改時保持索引最新是一個難題,可能超出了您現在正在做的事情。並且它並不是特別必要;從文件中讀取10行的時間不會很明顯。)

我擔心,沒有其他方法可以在文件中獲得第n行。 你必須經歷。 文件中沒有隨機訪問。

如果要從文本文件中獲取第n行,則必須先讀取n-1行。 這是順序文件的本質。 除非您知道所有線都是相同的長度,否則無法可靠地定位到特定線的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM