从文本文件中读取内容,然后写入二进制文件。文件名通过命令行参数传递。
该程序涉及到main()函数传参的问题,请查看:C语言mian()函数详解
代码如下:
#include <stdio.h>
#define SIZE 10
#define NAMESIZE 25
typedef struct {
char name[NAMESIZE];
int midterm;
int final;
int homeworks;
} student;
// writeastudent() 向打开的 fout 文件中写入 who(内容),返回写入的总字节数
int writeastudent(FILE *fdout, student * who){
char * p;
char * limit = ((char *)who)+sizeof(student);
for (p=(char *)who;p<limit;p++){
fputc(*p, fdout);
}
return (limit - (char *)who);
}
int main (int argc, char *argv[]){
int n = 0; // 记录的条数
int m; // 每条记录的字节数
student who; // 一条记录的缓存
FILE *fdin; // 输入文件
FILE *fdout; // 输出文件
if(argc!=3){
printf("Usage: %s infile outfile\n", argv[0]);
exit(0);
}
if((fdin=fopen(argv[1],"r"))==NULL){
perror("fopen");
exit(1);
}
if((fdout=fopen(argv[2],"w"))==NULL){
perror("fopen");
exit(1);
}
while(fscanf(fdin,"%s %d %d %d",
who.name, &who.midterm, &who.final, &who.homeworks)!=EOF){
m = writeastudent(fdout, &who);
printf("m=%d\n", m);
n++;
}
printf("n=%d\n", n);
fclose(fdin);
fclose(fdout);
}
该程序构建后,需要通过命令行工具(cmd.exe)运行。
例如,我编译后的程序在 E:\cDemo\Debug\ 文件,需要操作的 2 个文件位于 D 盘根目录,分别为 file1.txt、file2.txt。
file1.txt 中的内容为:
小明 12 45 56
王刚 90 90 89
长生 100 100 100
需要在命令行进行如下操作:
打开file2.txt,发现是乱码,因为是以二进制方式写入的,以文本方式打开,看到的内容无实际意义。