2015-11-28 79 views
-3

我想將文本從文本文件複製到如何將文本複製到字符數組中C

如何將文本文件複製到C中的字符串?

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

,我給它分配的變量一樣,

// char P[] = "Content from File"; 
+1

使用fgets()函數從文本文件讀取直到下一個換行符。 – nicomp

+2

看到這個http://stackoverflow.com/questions/174531/easiest-way-to-get-files-contents-in-c – nnn

回答

2

有幾種方法可以做到這一點。我個人最喜歡的是使用fread()這樣的:

// Open the file the usual way. 
File *file = fopen(filename, "r"); 
if(!file) exit(1); // Failed to open the file. 

// Figure out the length of the file (= number of chars) 
fseek(file, 0, SEEK_END); 
long int size = ftell(file); 
fseek(file, 0, SEEK_SET); 

// Create the char-array and read the file-content. 
char *P = malloc(size * sizeof(char)) // Allocate enough space. 
if(!P) exit(2); // Failed to allocate memory. 
fread(P, sizeof(char), size, file); // Read the file content. 

這裏有一個解釋,它是如何工作的:

  • fseek(file, 0, SEEK_END)注意到文件流file,並將流位置文件末尾(由SEEK_END表示)沒有偏移量(因此爲0)。你可以閱讀更多關於這個std-library函數here
  • ftell(file)取文件流file並返回當前的流位置(我們之前設置爲文件的結尾,所以這會給我們整個文件的長度)。該值將作爲long int返回。你可以閱讀更多關於它here
  • 現在我們必須將流位置設置回到開頭,以便我們稍後可以讀取文件。這是fseek()再次完成,這次給它的位置參數SEEK_SET。這告訴它跳回到文件的開始處。
  • 我們現在可以分配我們的文本緩衝區,在您的情況下稱爲P。 (在一個malloc之後,不要忘記檢查你是否真的得到了一個有效的指針!)
  • 最後,我們可以讀取文件! fread()需要四個參數。第一個是我們要寫的緩衝區。這是你的案例中的P char-array。第二個參數sizeof(char)告訴fread()單個元素將會是多大。在我們的例子中,我們想要讀取字符,所以我們把它傳遞給一個字符的大小。第三個參數是我們先前確定的文件的長度。最後一個參數是應該讀取的文件流。如果你想閱讀fread(),你可以這樣做here
相關問題