這個範例的需求很簡單,開啟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);
沒有留言:
張貼留言