C語言基礎(chǔ)
文件
- 設(shè)備文件:scoket,FIFO,sda
- 普通文件:二進(jìn)制文件,文本文件
- 二進(jìn)制文件格式:數(shù)據(jù)按其內(nèi)存中的存儲(chǔ)形式原樣存放伊脓。存儲(chǔ)量小府寒,無需轉(zhuǎn)碼,但是讀取慢报腔。一般文件都是二進(jìn)制存放(視頻,MP3)
- 文本文件:以ascii碼存儲(chǔ)剖淀,但是存儲(chǔ)量大纯蛾,轉(zhuǎn)為二進(jìn)制慢,直觀易記纵隔。記事本翻诉,gedit,vim捌刮。
- 數(shù)據(jù)保存在磁盤上碰煌,以文件的形式保存。
- 文件使用
- 打開文件
- FILE是一個(gè)文件結(jié)構(gòu)體數(shù)據(jù)類型
- *代表fp是一個(gè)指針變量绅作,F(xiàn)ILE:代表這個(gè)指針將來指向一個(gè)文件芦圾。
- fopen()
- 第一個(gè)參數(shù)是傳文件的路徑
- 第二個(gè)參數(shù)是打開文件的方式
- r:讀的方式
- w:寫的方式,如果這個(gè)文件不存在,他會(huì)新建文件俄认。如果文件存在个少,會(huì)對(duì)文件內(nèi)容進(jìn)行格式化之后進(jìn)行寫。
- a:追加的方式
- 如果文件打開失敗眯杏,fopen的返回值是NULL.否則返回的就是文件的地址夜焦。
- 文件打開失敗的原因:
- 如果是以只讀的方式打開,然而打開的文件不存在
- CPU內(nèi)存已滿
- 對(duì)文件進(jìn)行相關(guān)操作岂贩。
fputc('a',fp)==w
fgetc(fp)==r
fprintf(fp,"%d%d",i,j)==w
fscanf(fp,"%d",&value)==r
5. 字符串輸入到文件
char str[10]="hello"
fputs(str,fp)==w
fclose(fp)
6. 從文件讀出一行字符串茫经,如果沒有換行,就全讀出來。
char str[10]
fgets(str,sizeof(str),fp)==r
printf("str=%s",str)
- 一定要關(guān)閉文件
FILE *fp=fopen("/users/xxx/1.txt","w" )
{
if(fp=NULL)
{
perror("fopen failed:");//perror打印文件打開失敗的原因卸伞。
}
}
fputc('a',fp)
//char ch=fgetc(fp)(前面要用"r")
//printf("%c",ch);
fclose(fp);
FILE *fp=fopen("xxxxx","w");
int a=8;
fwrite(&a,sizeof(int),1,fp);
fclose(fp);//會(huì)看到一個(gè)有問題的TXT
FILE *fp=fopen("xxxxx","r");
fread(&a,sizeof(int),1,fp);
printf("a=%d",a);
fclose;
typedef struct Student
{
int num ;
char name[10];
}Student;
int main()
{
Student stu={10,"xxx"};
FILE *fp=fopen("xxxxx","w");
fwrite(&stu,sizeof(stu),1,fp);
fclose(fp);
}
int main()
{
Student stu;
FILE *fp=fopen("xxxxx","r");
fread(&stu,sizeof(stu),1,fp);
printf("stu.num=%d,stu.name=%c",stu.num,stu.name);
fclose(fp);
}
#include <stdio.h>
typedef struct Student
{
int num ;
char name[10];
}Student;
/*int main()
{
Student stu={10,"xxx"};
FILE *fp=fopen("/home/sunsuhui/1612/10.21/1.txt","w");
fwrite(&stu,sizeof(stu),1,fp);
fclose(fp);
}*/
int main()
{
Student stu;
FILE *fp=fopen("/home/sunsuhui/1612/10.21/1.txt","r");
fread(&stu,sizeof(stu),1,fp);
printf("stu.num=%d,stu.name=%s",stu.num,stu.name);
fclose(fp);
}
FILE *fp=fopen("/home/sunsuhui/1612/10.21/1.txt","r");
long int size=ftell(fp);//判斷_p位置偏移量在哪褥紫。
printf("%ld\n",size);
- fseek:將_p移動(dòng)到具體位置
- 第三個(gè)參數(shù):
- SEEK_SET:文件頭
- SEEK_END:文件尾
- SEEK_CUR:顯示當(dāng)前_p的位置
- 第二個(gè)參數(shù):
- 根據(jù)第三個(gè)參數(shù)決定,如果是SEEK_SET.用>0
- 如果是SEEK_CUR,可以是>0或<0.
- 如果是SEEK_END,一般是<0,距離尾部有多少個(gè)字節(jié)
- define
- 格式:一般大寫
- 帶宏體的宏
- 不帶宏體的宏
- 不帶參的宏函數(shù)
-
define OUTPUT printf("hello\n")
- 帶參的宏函數(shù)
- define擴(kuò)展
#define get(type,functionName)\
type get##functionName(type a,type b)\
{\
return a>b?a:b;\
}
get(int,IntMax)
get(float,FloatMax)
floatc=