-3
我想將文本從文本文件複製到如何將文本複製到字符數組中C
如何將文本文件複製到C中的字符串?
FILE *file;
file = fopen (filename, "r");
,我給它分配的變量一樣,
// char P[] = "Content from File";
我想將文本從文本文件複製到如何將文本複製到字符數組中C
如何將文本文件複製到C中的字符串?
FILE *file;
file = fopen (filename, "r");
,我給它分配的變量一樣,
// char P[] = "Content from File";
有幾種方法可以做到這一點。我個人最喜歡的是使用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。
使用fgets()函數從文本文件讀取直到下一個換行符。 – nicomp
看到這個http://stackoverflow.com/questions/174531/easiest-way-to-get-files-contents-in-c – nnn