关于"文件"的一些疑问(麻烦高手顺序答谢谢)
(麻烦高手顺序答,谢谢!)1.强哥的那本书里讲关于 fgetc()函数时第一句话是:"从指定的文件读入一个字符......"就是这个"读入"一开始我以为是读入到另一个文件,现在发现应该是读入到内存中(已经分配的存储空间,如ch=fgetc(fp);)是吗???
还有fgetc(fp),是自动顺序读取fp文件里面的字符?
2.先看一下强哥书里面的这个例题:
例13.1 从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个"#"为止.
#include
main( )
{FILE?*fp;
char ch,filename[10];
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{printf("cannot open file\n");
exit(0);}
ch=getchar( ); /*接收在执行scanf语句时最后输入的回车符*//*<-这行,上面的 scanf("%s",filename);不存放回车符??*/
ch=getchar( );/*接收输入的第一个字符*/
while(ch!='#')
{
fputc(ch,fp);putchar(ch);
ch=getchar();
}
fclose(fp);
}
3.例13.2将一个磁盘文件中的信息复制到另一个磁盘文件中
#include
main( )
{FILE?*in,?*out;
char ch,infile[10],outfile[10];
printf("Enter the infile name:\n");
scanf("%s",infile);
printf("Enter the outfile name:\n");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)/*疑问在这里,infile是什么,不就是存放文件名的字符数组的首地址吗!能这样当文件指针用吗??*/
{printf("cannot open infile\n");
exit(0);
}
if((out=fopen(outfile,"w"))==NULL)
{printf("cannot open outfile\n");
exit(0);
}
while(!feof(in))fputc(fgetc(in),out);
fclose(in);
fclose(out);
}
[此贴子已经被作者于2007-4-8 14:57:11编辑过]
----------------解决方案--------------------------------------------------------
谢谢QQ0001000朋友,但下面的两个疑问......
----------------解决方案--------------------------------------------------------
ch=getchar( ); /*接收在执行scanf语句时最后输入的回车符*//*<-这行,上面的 scanf("%s",filename);不存放回车符??*/
这是因为scanf();按回车键时把回车换行符分解成回车符和换行符getchar();接收到的是回车符.
我可以给出一个例子:
#include <stdio.h>
int main()
{
char ch;
clrscr();
scanf("%c",&ch);
ch=getchar();
printf("%d,%d",ch,'\n');
getch();
}
----------------解决方案--------------------------------------------------------
if((in=fopen(infile,"r"))==NULL)/*疑问在这里,infile,是什么?不就是字符数组的首地址吗?能当文件指针用吗??*/
infile 是字符数组的首地址,它不是当作文件指针用的,只是作为一个文件名.
例如打开一个文件TEST in=fopen("TEST","r"); 这里的in是作为文件指针.
----------------解决方案--------------------------------------------------------
辛苦大家了.
但.....if((in=fopen(infile,"r"))==NULL)/*疑问在这里,infile,是什么?不就是字符数组的首地址吗?能当文件指针用吗??*/
我的意思是:infile是存放一个文件名的字符数组的首地址,它可以当文件名或文件指针用?
----------------解决方案--------------------------------------------------------
函数fopen()原型是:
FILE *fopen (const char *filename, const char *mode);
形参:const char *filename就是表示文件名,可以(应该)包含路径,filename可以是字面字符串,也可以是指向字符串的指针。
形参:const char *mode表示打开文件方式:可以有6种取值,具体如下:
r:打开文件,读取。文件不存在则返回NULL;
w:打开文件,写入。文件不存在,创建,已存在,直接先删后建,不发出警告;
a:打开文件,追加内容。文件不存在,创建,已存在,在文件末尾追加内容;
r+:打开文件,读写。文件不存在,创建,已存在,数据写入开头,覆盖原来数据;
w+:打开文件,读写。文件不存在,穿件,已存在,则覆盖;
a+:打开文件,读跟追加。文件不存在,创建,已存在,则追加内容到文件末尾。
模式跟文件名,如果用字符串常量,则都应用双引号括起。
另外,小声说一句,楼主进度跟我差不多,我也到文件读写操作,不过,我不喜欢谭的书,有点简略,也就是有点难度。
----------------解决方案--------------------------------------------------------
我记得以前验证过这两个程序,觉得没有问题啊?
----------------解决方案--------------------------------------------------------
并没有错,好好理解下哈
----------------解决方案--------------------------------------------------------