文件
- 文件分兩類:文本文件、二進制文件
- 文本文件:是基于字符編碼的文件常見的編碼有ASCII。以ASCII格式存放,一個字節(jié)存放一個字符。
1000 0x2710 31303030 用文本工具打開時 10000 itoa atoi
1000 0x2710 0x2710 用文本工具打開時10變成16的ASCII不可見
- 二進制文件:基于值編碼的文件。以值(補碼)編碼格式存放。是把數(shù)據(jù)以二進制數(shù)的格式存放在文件中。
數(shù)據(jù)按其內(nèi)存中的存儲形式原樣存放。
緩沖區(qū)
可以通過FCLOSE(fp)和fflush(fp)
文件打開方式:
“r” 讀取 存在的文件
“r+” 寫入
“w” 寫入 創(chuàng)建或覆蓋文件
“w+” 讀取
“a” 追加 創(chuàng)建或覆蓋原文件后追加
“a+” 讀取
文件讀寫操作
fgetc fputc 讀寫一個的字符 文件結(jié)尾標志EOF -1
int fputc(int ch,FILE *stream);
寫入成功,返回寫入成功字符,如果失敗,返回EOF
int fgetc(FILE *stream);
正常,返回讀取的字符;讀到文件尾或出錯時,為EOF
所有對文件的讀,盡量少用int feof (FILE*fp);到達文件結(jié)尾返回真1,未到達文件結(jié)尾返回假0。
key:feof()此函數(shù)慎用
while(ret = fegtc(fp) && !feof(fp))
{
printf("ret = %c\n",ret);
}
int *fputs(char *str,FILE *fp)
把str指向的字符串寫入fp指向的文件中。
返回值 正常為0,出錯返回EOF
char *fgets(char *str,int length,FILE *fp)
fputs();fgets();讀寫 一行的字符
fgets(buf,len,fp);最多讀len -1個字符,中途遇到‘\n’(會被讀?。?..EOF結(jié)束本次讀取后,在每讀一行后,自動追加 ‘\0’
1、讀n-1 個字符前遇到\n,讀取結(jié)束
2、讀n-1個字符前遇到EOF,讀取結(jié)束
返回值:正常返回strz指針;出錯或遇到文件結(jié)尾,返空指針NULL
hexdump -C aa.c 以十六進制查看a.out
hexdump -C
Linux下每個文件的末尾都自動加上‘\n’,WINDOWS不會自動加上。
能用文件相關(guān)函數(shù)來表示讀到文件結(jié)尾的,不要用feof這個函數(shù)。
特別注意:
文本文件的重要標志'\0' '\n'