| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2176 人关注过本帖
标题:对于重复调用函数fgetc(fp) 下形参fp值是否改变的问题
取消只看楼主 加入收藏
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
结帖率:50%
收藏
 问题点数:0 回复次数:5 
对于重复调用函数fgetc(fp) 下形参fp值是否改变的问题
程序代码:
#include "stdio.h"
void main()
{
    FILE *fp;
    char fname[100],ch;
    scanf("%s",fname);
    while((fp=fopen(fname,"r+"))==NULL)
        scanf("%s",fname);
    getchar();
    ch=fgetc(fp);
    putchar(ch);
    printf("%#o\n",fp);  //这个是后来加的,验证fp的值到底有没变
    ch=fgetc(fp);
    putchar(ch);
    printf("%#o\n",fp);  //同上
    fclose(fp);
}

这个代码没什么意义,我只是想知道为什么
ch=fgetc(fp);
while(ch!=EOF)
  {
    putchar(ch);
    ch=fgetc(fp);
  }

能达到按字符输出fp所指文件文本内容的目的,因为看上去感觉怎么也该是ch=fgetc(fp++)才对呀。。
所以我写了最上面那段代码,明白ch=fgetc(fp);重复使用以后,ch的值相当于fp所指文件文本下一个字符……以此类推。
所以就顺理成章的以为,在调用函数fgetc()之后,形参的指针应该是自增的,于是为了验证,分别在两个ch=fgetc(fp); 之后加了printf("%#o\n",fp);
但是得到的结果是前后的fp值都没有变,相当于说明指针fp没有因为fgtec()的调用而改变。。
这就郁闷了,那么为什么这样的代码还能行得通呢?   我想知道第二段代码为什么能行,或者是我验证的方式错了吗?
2013-02-06 14:42
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:0 
回复 2楼 zklhp
你说的 函数内部做的,如果能大概知道个过程的话也足够了,可是我根本连猜都猜不出它是怎么做到的呀。。。明明指针没变但是字符却变了,那么在调用fgetc()以后,如果需要再次从头开始(从文件文本的第一个字符),那样虽然指针没变,却不知道当前要调用fgetc()的话,fp到底指向哪里了,除非一个一个数用了几次fgetc。。另外,这个情况下,重新用fp=fopen()能解决这个问题吗?  fopen只是返回文件指针给fp而已,但是fp根本就没有变过,这样的话,是不是意味着没办法从头开始呢?

得不到的永远在骚动,被偏爱都有恃无恐
2013-02-06 15:20
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:0 
回复 4楼 TonyDeng
谢谢解释,我只是初学而已,你说的一些名词我只能看字面一知半解,不过我会去好好看看的,O(∩_∩)O谢谢!

得不到的永远在骚动,被偏爱都有恃无恐
2013-02-06 18:08
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:0 
回复 7楼 embed_xuel
下午刚看的,理解不是很深刻,有看到typedef struct {……}FILE,但是不明白其中的成员有什么意义,所以没仔细看,以后一定改

得不到的永远在骚动,被偏爱都有恃无恐
2013-02-06 18:11
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:0 
回复 8楼 zklhp
谢谢斑竹的解释^_^

得不到的永远在骚动,被偏爱都有恃无恐
2013-02-06 18:13
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:0 
回复 13楼 洫魇
嗯,我正在想弄明白这个结构体里每个变量的含义和作用,O(∩_∩)O谢谢

得不到的永远在骚动,被偏爱都有恃无恐
2013-02-06 23:02
快速回复:对于重复调用函数fgetc(fp) 下形参fp值是否改变的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020532 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved