2017-07-28 41 views
2

這是文件:讀取文件,modifiying每一行,它存儲到一個緩衝區,打印一次全部

line 1 
line 2 
line 3 

如何逐行讀取文件中的行...

一個附加後綴爲每行..

FILE *fp = fopen ("file", "r"); 
while (fgets (buffer, sizeof (buffer), fp) != NULL) { 

    // append "test" to each line. 
    // store the result in a buffer named "result" 

} 
fclose (fp); 

打印結果一下子:

printf("%s", result); 

預期結果:

line 1test 
line 2test 
line 3test 
+0

您可以使用'getline()'函數,但它是GNU特有的。 – Gaurav

+1

歡迎來到SO。請注意,這不是免費的家庭作業送貨服務。閱讀[tour](https://stackoverflow.com/tour)和[如何提問](https://stackoverflow.com/help/how-to-ask)。然後你會看到你應該提供你到目前爲止所嘗試的以及你的具體問題。 – Gerhardh

+1

您需要*將每一行連接到您的'result'緩衝區。有一個很好的標準C函數來連接字符串(如果你使用你最喜歡的搜索引擎,你應該很快找到它,就像[讀一些好的初學者書籍一樣](http://stackoverflow.com/questions/562303/)在-明確-C-書指南和列表))。 –

回答

0

下面的程序可能會做的要求,但它是沒有效率不夠。我只是舉一個粗略的例子。希望這可以幫助。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void display(char** temp,int LinesWritten); 

int main() 
{ 
FILE *fp; 

char *buffer = (char*)malloc(sizeof(char)*101); // 101 is just an assumption. dynamic size may be decided 
char **result = (char**)malloc(sizeof(char*)*10); // 10 is just an assumption. dynamic size may be decided 
int LinesWritten = 0; 
char **temp = result; 
char **freetemp = result; 

if((fp = fopen("file.txt","r"))==NULL) 
{ 
     printf("Error while opening file\n"); 
     exit(1); 
} 

while((fgets(buffer,100,fp))&&(!(feof(fp))))  //assuming that 100 characters will be read into the buffer 
{ 
     if(*result = (char*)malloc(sizeof(char)*10)) 
     { 
       sprintf(*result,"%s%s",buffer,"test"); 
       *result++; 
       LinesWritten++; 
     } 
} 

fclose(fp); 

display(temp,LinesWritten); 

if(freetemp!=NULL) 
{ 
     free(freetemp); 
} 

return 0; 

} 

void display(char** temp,int LinesWritten) 
{ 

for(int i=0;i<LinesWritten;i++) 
{ 
     printf("%s\n",*temp); 
     *temp++; 
} 

return; 
} 
+0

1)這會導致內存泄漏。 2)你需要從輸入行中刪除換行符。 3)'malloc(sizeof(char)* 10)':因爲它小於行緩衝區,所以會導致緩衝區溢出。 4)'!(feof(fp))':最後一行沒有換行符時會發生故障。這是多餘的,應該刪除。 – BLUEPIXY

相關問題