C 文件操作回顾
2018-03-13 本文已影响15人
harrytc
可以在程序运行时分配更多的内存,主要工具是malloc(),它接受一个参数,所需字节数,然后malloc()找到可用内存中一个大小合适的快。内存是匿名的。也就是说malloc()分配了内存,单没有为它指定名字。然而,它却可以返回那块内存第一个字节的地址
fopen() 函数返回一个文件指针(file pointer),其他I/O函数用这个指针来指定该文件。文件指针是一种只想FILE的指针;FILE是stdio.h中定义的一种派生类型。指针fp并不止像实际的文件,而是只想一个关于文件信息的数据包,其中包括文件I/O的使用缓冲区信息。 因为标准库中的I/O函数使用缓冲区,所以他们需要知道缓冲区的位置,缓冲区的当前缓冲能力以及所使用文件。
C 中文件操作我一直都不太会,今天练习一下
#include <stdio.h>
#define N 5
typedef struct student
{
long sno;
char name[10];
float score[3];
}STU;
void fun(char *filename)
{ FILE *fp; int i, j;
STU s[N], t;
fp = fopen(filename, "rb");
fread(s, sizeof(STU), N, fp);
fclose(fp);
for (i=0; i<N-1; i++)
for (j=i+1; j<N; j++)
if (s[i].sno > s[j].sno)
{ t = s[i]; s[i] = s[j]; s[j] = t; }
fp = fopen(filename, "wb");
fwrite(s, sizeof(STU), N, fp);
fclose(fp);
}
int main(int argc, const char * argv[])
{
/*printf("Hello, World!\n");
float a = 12.;
int b = 23;
printf ("%d\n%f", b, a);
printf("%d, %d, %d\n", 8 ,0121, 0x18);*/
STU t[N]={ {10005,"ZhangSan", 95, 80, 88}, {10003,"LiSi", 85, 70, 78},
{10002,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87},
{10001,"MaChao", 91, 92, 77}}, ss[N];
int i, j; FILE * fp;
fp = fopen("student.dat", "wb");
fwrite(t, sizeof(STU), 5, fp);
fclose(fp);
printf ("\n\n The Original Data :\n\n");
for (j = 0; j < N; j++)
{
printf ("\n No : %ld Name : %-8s Scores: ",t[j].sno, t[j].name);
for (i = 0; i < 3; i++)
printf("%6.2f", t[j].score[i]);
printf("\n");
}
fun ("student.dat");
printf("\n\n The Data After Sorting: \n\n");
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), 5, 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");
}
return 0;
}
写好之后问题又来了,文件写到哪里去了呢
我不好一个个文件夹 去找
打开终端输入
find / student.dat
在磁盘查找吧,这种效率太低,千万别学我
把 / 换成那个目录
顺着目录去找这个文件就好
文件:我在这呢!