c语言库函数的案例 c语言常用的库函数表( 八 )


2) 每写入一个字符 , 文件内部位置指针向后移动一个字节 。
3) fputc函数有一个返回值,如写入成功则返回写入的字符 , 否则返回一个EOF 。可用此来判断写入是否成功 。
【例13.2】从键盘输入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上 。
#includestdio.h
main()
{
FILE *fp;
char ch;
if((fp=fopen("d:\\jrzh\\example\\string","wt+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("input a string:\n");
ch=getchar();
while (ch!='\n')
{
fputc(ch,fp);
ch=getchar();
}
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf("\n");
fclose(fp);
}
程序中第6行以读写文本文件方式打开文件string 。程序第13行从键盘读入一个字符后进入循环,当读入字符不为回车符时,则把该字符写入文件之中,然后继续从键盘读入下一字符 。每输入一个字符,文件内部位置指针向后移动一个字节 。写入完毕,该指针已指向文件末 。如要把文件从头读出,须把指针移向文件头 , 程序第19行rewind函数用于把fp所指文件的内部位置指针移到文件头 。第20至25行用于读出文件中的一行内容 。
【例13.3】把命令行参数中的前一个文件名标识的文件,复制到后一个文件名标识的文件中,如命令行中只有一个文件名则把该文件写到标准输出文件(显示器)中 。
#includestdio.h
main(int argc,char *argv[])
{
FILE *fp1,*fp2;
char ch;
if(argc==1)
{
printf("have not enter file name strike any key exit");
getch();
exit(0);
}
if((fp1=fopen(argv[1],"rt"))==NULL)
{
printf("Cannot open %s\n",argv[1]);
getch();
exit(1);
}
if(argc==2) fp2=stdout;
else if((fp2=fopen(argv[2],"wt+"))==NULL)
{
printf("Cannot open %s\n",argv[1]);
getch();
exit(1);
}
while((ch=fgetc(fp1))!=EOF)
fputc(ch,fp2);
fclose(fp1);
fclose(fp2);
}
本程序为带参的main函数 。程序中定义了两个文件指针fp1和fp2,分别指向命令行参数中给出的文件 。如命令行参数中没有给出文件名,则给出提示信息 。程序第18行表示如果只给出一个文件名,则使fp2指向标准输出文件(即显示器) 。程序第25行至28行用循环语句逐个读出文件1中的字符再送到文件2中 。再次运行时,给出了一个文件名,故输出给标准输出文件stdout,即在显示器上显示文件内容 。第三次运行,给出了二个文件名,因此把string中的内容读出,写入到OK之中 。可用DOS命令type显示OK的内容 。
13.4.2 字符串读写函数fgets和fputs
1. 读字符串函数fgets
函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:
fgets(字符数组名,n,文件指针);
其中的n是一个正整数 。表示从文件中读出的字符串不超过 n-1个字符 。在读入的最后一个字符后加上串结束标志'\0' 。
例如:
fgets(str,n,fp);
的意义是从fp所指的文件中读出n-1个字符送入字符数组str中 。
【例13.4】从string文件中读入一个含10个字符的字符串 。
#includestdio.h
main()
{
FILE *fp;
char str[11];
if((fp=fopen("d:\\jrzh\\example\\string","rt"))==NULL)
{
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
}
fgets(str,11,fp);
printf("\n%s\n",str);
fclose(fp);
}
本例定义了一个字符数组str共11个字节,在以读文本文件方式打开文件string后,从中读出10个字符送入str数组,在数组最后一个单元内将加上'\0',然后在屏幕上显示输出str数组 。输出的十个字符正是例13.1程序的前十个字符 。