c语言文件和特殊修饰符
static和extern:
static修饰变量(可以修饰局部变量),只有包含那个变量定义的源代码文件可以访问(内部变量)
延长局部变量的生命周期,从程序启动到退出
作用:static定义的变量作用域会延长
static定义变量的语句只会被执行一次
extern定义的变量哪个源文件都可以使用,只要声明了就可以(外部变量)
extern不可以修饰局部变量
static对全局变量的作用
static修饰的全局变量只能在当前文件中使用,而不能在其他文件中使用
static 修饰的函数是内部函数(只能在定义的文件中使用)
extern 修饰的函数可以在内部和外部使用(可以在头文件中声明也可以在使用之前声明)
12)文件操作:
fopen函数用来打开一个文件,一般形式为:
文件指针变量名 = fopen(文件名,文件使用方式)
FILE *fp = NULL;
fp = fopen ("a.txt", "r"); //以只读方式打开文件
if(fp != NULL){
//操作文件
}else{
//提示用户
}
fclose(fp);
正常关闭文件fclose返回0,如果返回其它则关闭出错。如果没有关闭,则导致文件写入失败
文件操作步骤:
1) 建立文件指针
FILE *fp = NULL;
2) 打开文件
fopen(文件名,操作方式);
如果打开成功,返回文件首地址,失败返回NULL;
字符读写函数:
fputc(字符量,文件指针);//待写入的字符量可以是字符常量或变量
fputc('a', fp);
例:
char ch = 'X';
FILE *fp = NULL;
fp = fopen("fputs.txt", "w");
if(fp != NULL){
fputc(ch, fp);
printf("写入成功");
//ch = fget(fp);
}
fclose(fp);
char s = fgetc(fp);
while(s != EOF){ //EOF文件末尾的标志
putchar(s);
s = fgetc(fp); //系统自动读取下一个字符
}
char ch;
FILE *fp = fopen("inputString.txt", "w+");
if(fp = NULL){
printf("请输入字符串:");
ch = getchar();
int count = 0;
while(ch != '\n'){
count++;
fputc(ch, fp);
ch = getchar();
}
printf(" 一 共输入了%d个字符\n", count);
rewind(fp); //把文件指针重新指向文件头
ch = fgetc(fp);
while(ch != EOF){
putchar(ch);
ch = fgetc(fp);
}
fclose(fp);
return 0;
}
count = fputs(str, fp);//count返回本次写入字符串长度
char str[50]; //fgets读取时,当文件内容读取完毕时,会自动加上\0
fget(str, sizeof(str), fp); //fgets读取时,当读取到\n或EOF时,读取结束
char *s = "asdfasd";
fputs(s, fp);
char str[3];//长度为3,一个汉子读取一半,长度为4全部读取
fgets(str, sizeof(str), fp);
fread(buffer, size, count, fp)
fwrite(buffer, size, count, fp)
buffer:表示存放输入输出数据的首地址。
size:表示数据块的字节数
count:表示要读写的数据块块数
fp:表示文件指针
int a= 1, b = 2;
fprintf(fp,"%d#%d;", a, b);
fscanf(fp, "%d,%d", &arr[i][0], &arr[i][1]);
struct Struct stu;
fseek(文件指针,位移量,起始点)
指针定位:
fseek(fp, sizeof(struct Student), SEEK_SET); //SEEK_SET文件首
从文件中读取信息:
freak(&str, sizeof(struct Student), 1, fp);