fclose fp fclose头文件
今天给各位分享fclose fp的知识,其中也会对fclose头文件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
fp=fclose正确吗
fp=fclose正确。
因为fp是在函数save_one_month中声明的,却在函数外进行fclose(fp),编译器自然认为fp是没有定义的标识符,这引起了一连串的错误。
如果流成功关闭,fclose返回 0,否则返回EOF(-1)。出错的原因包括:传给函数的文件指针不合法,程序运行时遇到中断信号或是操作系统出现故障等等,可通过查看errno值来确定出错原因。
补充:
字符串在存储上类似字符数组,它每一位单个元素都是能提取的,字符串的零位是它的长度,如s[0]=10,这提供给我们很多方便,例如高精度运算时每一位都能转化为数字存入数组。
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。
fread函数的用法
fread函数可从文件中读取二进制数据
语法:
A= fread(fid, count)
A= fread(fid, count, precision)
其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。
例子:
fid= fopen('alphabet.txt','r');
c= fread(fid, 5)'
c=
65 66 67 68 69
fclose(fid);
程序说明:alphabet文件中按顺序存储着26个英文字母,读取文件之前要先打开文件,由于未指定读取数据的类型,所以程序指定默认类型为无符号字符型即uchar,65、66、67、68、69代表A、B、C、D、E,文件用完还要记得关闭文件,以便释放指针。
扩展资料:用法
int feof(FILE*stream);
参数
流:FILE结构的指针
注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。
参考资料:fread--百度百科
fseek(f,0,SEEK_SET);
意思是把文件指针指向文件的开头
fseek
函数名: fseek
功能:重定位流上的文件指针
用法: int fseek(FILE*stream, long offset, int fromwhere);
描述:函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
返回值:成功,返回0,否则返回其他值。
fseek position the file position pointer for the file referenced by stream to the byte location calculated by offset.
程序例:
#include<stdio.h>
long filesize(FILE*stream);
int main(void)
{
FILE*stream;
stream= fopen("MYFILE.TXT","w+");
fprintf(stream,"This is a test");
printf("Filesize of MYFILE.TXT is%ld bytes\n", filesize(stream));
fclose(stream);
return 0;
}
long filesize(FILE*stream)
{
long curpos, length;
curpos= ftell(stream);
fseek(stream, 0L, SEEK_END);
length= ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
int fseek( FILE*stream, long offset, int origin);
第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END或 SEEK_SET
SEEK_SET:文件开头
SEEK_CUR:当前位置
SEEK_END:文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
简言之:
fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
使用实例:
#include<stdio.h>
#define N 5
typedef struct student{
long sno;
char name[10];
float score[3];
} STU;
void fun(char*filename, STU n)
{
FILE*fp;
fp= fopen(filename,"rb+");
fseek(fp,-1L*sizeof(STU),SEEK_END);
fwrite(&n, sizeof(STU), 1, fp);
fclose(fp);
}
void main()/*修改覆盖最后一个学生数据*/
{
STU t[N]={{10001,"MaChao", 91, 92, 77},{10002,"CaoKai", 75, 60, 88},
{10003,"LiSi", 85, 70, 78},{10004,"FangFang", 90, 82, 87},
{10005,"ZhangSan", 95, 80, 88}};
STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
int i,j; FILE*fp;
fp= fopen("student.dat","wb");
fwrite(t, sizeof(STU), N, fp);
fclose(fp);
fp= fopen("student.dat","rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
printf("\nThe original data:\n\n");
for(j=0; j<N; j++)
{
printf("\nNo:%ld Name:%-8s Scores:",ss[j].sno, ss[j].name);
for(i=0; i<3; i++) printf("%6.2f", ss[j].score[i]);
printf("\n");
}
fun("student.dat", n);
printf("\nThe data after modifing:\n\n");
fp= fopen("student.dat","rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
for(j=0; j<N; j++)
{
printf("\nNo:%ld Name:%-8s Scores:",ss[j].sno, ss[j].name);
for(i=0; i<3; i++) printf("%6.2f", ss[j].score[i]);
printf("\n");
}
}
如果你还想了解更多这方面的信息,记得收藏关注本站。