這個範例的需求很簡單,開啟GET.TXT檔案,然後把檔案內容逐一地寫進PUT.TXT;順便給列印出來。
GET.TXT的檔案內容如下,內文是我隨便key的....
Hello!! World!! I'm Picasso, This is my testing function in C. How are you?? I'm so so, and you?? Thanks, bye!!1. 用ferror(fp) != 0; 等同於fp == NULL;
2. feof(fp) == 0,來判斷是否已經達到檔案的結尾 (End Of File);
程序碼範例如下:
// fgets_fputs_foef_ferror.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
FILE *fp0 = (FILE *)NULL, *fp1 = (FILE *)NULL;
char szTemp[32];
fp0 = fopen("GET.TXT", "r");
if (ferror(fp0) != 0) {
fclose(fp0);
exit(EXIT_FAILURE);
}
fp1 = fopen("PUT.TXT", "w+");
if (ferror(fp1) != 0) {
fclose(fp1);
exit(EXIT_FAILURE);
}
while (feof(fp0) == 0) {
memset(&szTemp, '\0', sizeof(char) * 32);
fgets(szTemp, sizeof(char) * 32, fp0);
fputs(szTemp, fp1);
printf("%s", szTemp);
}
fclose(fp0);
fclose(fp1);
exit(EXIT_SUCCESS);
}
由此可見,fgets(), fputs()在一個檔案中是以「行」為單位的,在檔案中會以是否已讀取到「換行字元 ('\n')」作為判斷的依據。此外,在這個範例中看不出來,fgets()在讀取資料時,會多送一個換行字元 ('\n'),而fputs()則不會。
附上這些函式的原型宣告:
1. char *fgets(char *str, int num, FILE *fp);
2. int fputs(const char *s, FILE *stream);
3. int feof(FILE *stream);
4. int ferror(FILE *stream);
沒有留言:
張貼留言