c文件指针和文件的打开与关闭

qq_41232595 2018-04-05 07:57:12
FLIE *aaa,*bbb;//声明一个文件指针
aaa=fopen("in","w")// 将aaa与文件关联并以只写方式打开
fclose(aaa);//关闭aaa

那么问题来了1. 第二行是得到文件指针并打开,如果我不想打开 只希望将aaa和in这个文件关联 有没有方法可以实现呢,也就是希望aaa指向in 但是不打开
2.文件指针可以重新赋值吗?
如果我在第二行和第三行之间插入 aaa=fopen("out","w");
这样aaa是否就指向out? 那现在 in这个文件就没有指针而且没有关闭 一个文件打开了关不关闭有什么区别?
3.现在in文件里面有123(空格) 456
在第2行后面添加
int a,b;
fscannf(aaa,"%d",&a);
fscannf (aaa,"%d",&b);
printf("%d %d",a,b);

结果为 123 456
为什么第二次扫描aaa会从第一次结束的位置开始 具体的过程是怎样的?
...全文
594 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
srhouyu 2018-04-06
  • 打赏
  • 举报
回复
1. 不知道你所谓的“产生关联”要多关联才算?按我的理解,(1)最低程度的关联是你只知道文件名,也就是只有一个字符串;(2)再高一点是你知道文件名,并且检查过文件是能打开的,也就是打开以后马上关闭;(3)再高一点就是打开文件。 2. 可以再赋值,因为aaa也不过是指向一个携带有一些信息的变量。如果你不关闭in,在程序运行期间in就一直是被打开、占用的,外在表现就是与in有关的内存得不到释放,其他程序也不能再修改in文件。但程序退出后in仍然会被释放。 3. aaa指向的那个携带有文件信息的变量,类型是struct FILE,里面记录有你当前的位置。每次发生读写,记录的位置都会自动变化。例如你读/写了4个字节,它就会+4。你要是想知道你现在所处的位置,可以随时调用ftell(aaa)来查看。当然你也可以调用fseek修改你的位置。
lin5161678 2018-04-06
  • 打赏
  • 举报
回复
1 做不到 fopen这个函数的作用是 创建一个FILE 并返回指向这个FILE的指针 现在不创建一个FILE 却希望有一个指针指向一个FILE 这就很不符合逻辑了 2 打开了但是不关闭 FILE占用的一些系统资源无法返回给系统 比如 文件描述符 缓冲区 重复太多可能会导致 无法打开文件 内存被大量占用 等问题 3 你打开文件的方式是 "w" 这个模式会清空文件内容 你调用fscanf 的读取不到数据的 这个问题暂略 怎么知道读取数据的位置 FILE结构体里面记录了读取数据的位置 fscanf这个会函数会修改FILE结构体的记录
名叫猫的鱼 2018-04-06
  • 打赏
  • 举报
回复
1. 兄弟,文件指针放在那里不用干嘛,那就干脆不要声明*aaa了 2. 当然可以重新赋值,重新赋值后原来的文件就没法关闭了,相当于系统资源没有释放,这样子肯定不行的 3. fscanf成功的话,返回值是>0的,这时会移动文件游标的

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧