| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2451 人关注过本帖
标题:[求助]fgets函数使用请教
取消只看楼主 加入收藏
wangjian2006
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-9
收藏
 问题点数:0 回复次数:6 
[求助]fgets函数使用请教

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: wangjian2006 QQ:464663391
*/ 时间: 2007-7-9 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


先看一段小代码

#include<stdio.h>
#include<string.h>

void main()
{
FILE *in = NULL;
char *p = NULL;
char xx[3][3] = {0, };
int i = 0;

//打开in.dat文件,该文件中有两行数据,第一行为11,第二行为22
in = fopen("in.dat","r");

//第一次调用fgets函数
p = fgets(xx[0],3,in);
printf("\nxx[0] = %s",xx[0]);

//第二次调用fgets函数
p = fgets(xx[0],3,in);
printf("\nxx[0] = %s",xx[0]);

*p = NULL;
fclose(in);
};


可能大家都知道输出结果理所当然是:
11
22

我的疑问是在执行fgets(xx[0],3,in)前后,指针in不变,返回的指针p也不会变(都是指向&xx[0][0]);

那么程序凭借什么在第二次执行fgets时去从第二行开始获取??

不知道我表达的意思大家明白不?或许程序自己定义了一个指针来指向执行后的开始地址?

[此贴子已经被作者于2007-7-9 23:20:03编辑过]

搜索更多相关主题的帖子: fgets 函数 中国 include 
2007-07-09 22:06
wangjian2006
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-9
收藏
得分:0 

楼上的同志,没看懂我的问题就开始批人一顿,都替你捏把汗

2007-07-09 23:16
wangjian2006
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-9
收藏
得分:0 
不过有一点你确实说对了,代码是我随手写的,没有编译过,结果确实错了。

正确结果是:
11
11

奇怪了,可能是我之前碰到的问题哪里记录有误。。正在改代码再看看
2007-07-09 23:18
wangjian2006
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-9
收藏
得分:0 

晓得问题出在哪了
#include<stdio.h>
#include<string.h>

void main()
{
FILE *in = NULL;
char *p = NULL;
char xx[3][3] = {0, };
int i = 0;

//打开in.dat文件,该文件中有两行数据,第一行为11,第二行为22
in = fopen("in.dat","r");

//第一次调用fgets函数
p = fgets(xx[0],4,in);
printf("\nxx[0] = %s",xx[0]);

//第二次调用fgets函数
p = fgets(xx[0],4,in);
printf("\nxx[0] = %s",xx[0]);

*p = NULL;
fclose(in);
};

2楼的同志提醒了我,要读(4-1)位,这样才能读到'\n',这也似乎回答了我自己的问题 ,只有在读到'\n'的情况下,第二次调用gets时才会读第二行。

2007-07-09 23:25
wangjian2006
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-9
收藏
得分:0 

那程序到底是怎样实现的,在读到'\n'的情况下“记忆”一次,然后第二次调用gets时才会读下一行?

in 始终指向文件头;
p 始终指向&xx[0][0];

2007-07-09 23:29
wangjian2006
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-9
收藏
得分:0 
以下是引用mp3aaa在2007-7-9 23:48:29的发言:
你怎么知道in始终指向文件头呢?‘
in始终指向文件头的话 为什么我的那个程序能读取到 22呢?

我也一直以为in所指向的值会变,结果我在VC下一调试,结果都是指向文件头,所以我才纳闷来这里提问

2007-07-10 00:01
wangjian2006
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-9
收藏
得分:0 

#include<stdio.h>
#include<string.h>

void main()
{
FILE *in = NULL;
char *p = NULL;
char xx[3][3] = {0, };
int i = 0;

//打开in.dat文件,该文件中有两行数据,第一行为11,第二行为22
in = fopen("in.dat","r");

//第一次调用fgets函数
p = fgets(xx[0],4,in);
printf("\nxx[0] = %s",xx[0]);
printf("\np1 points: %x\n",*p);
printf("\np1 Value: %x\n",p);
printf("\np1 Address: %x\n",&p);

//第二次调用fgets函数
p = fgets(xx[0],4,in);
printf("\nxx[0] = %s",xx[0]);
printf("\np2 points: %x\n",*p);
printf("\np2 Value: %x\n",p);
printf("\np2 Address: %x\n",&p);

*p = NULL;
fclose(in);
};

[此贴子已经被作者于2007-7-10 0:35:17编辑过]

2007-07-10 00:34
快速回复:[求助]fgets函数使用请教
数据加载中...
 
   



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

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