【原】C语言文件指针在主函数与子函数之间的互相传递

最近正好需要用C语言操作一下文件指针,尤其是主函数与子函数之间互相传递,所以顺便学习总结一下。

第1种方式:将文件指针定义为全局变量。

#include "stdio.h"

FILE *fp1; //将文件指针定义为全局变量

void sub(void)
{
    fp1=fopen("test.txt","awt");//如果有选项a可以在保证文件的原有内容不丢失,新内容写在后面,如果没有a则会删除原有内容替换为新内容。
    fprintf(fp1,"\n%s\n","测试文件指针作为全局变量是否可以传递到子函数");
}

void main(void)
{
    sub();
    fclose(fp1);
}

 

第1.1种方式:对第1种方式扩展,由于fp1是全局变量,所以子函数对它的操作会影响到主函数:定义fp1为全局变量,子函数对其赋值,然后主函数对其所指文件进行写入操作。

#include "stdio.h"

FILE *fp1; //将文件指针定义为全局变量

void sub(void)
{
    fp1=fopen("test.txt","awt");//如果有选项a可以在保证文件的原有内容不丢失,新内容写在后面,如果没有a则会删除原有内容替换为新内容。
    
}

void main(void)
{
    sub();
    fprintf(fp1,"\n%s\n","测试文件指针作为全局变量是否可以传递到子函数");
    fclose(fp1);
}

 

 

第2种方式:在main函数中定义并初始化文件指针,然后传入子函数供子函数使用。

#include "stdio.h"

void zi(FILE *fp)
{
    fprintf(fp,"\n%s\n","测试文件指针作为形参传递给子函数");
}

void main(void)
{
    FILE *fp2=fopen("D:\\test.txt","awt");
    zi(fp2);
    fclose(fp2);
}

 

第2.1种方式:对第2种方式进行拓展,可以令子函数获取一个文件的指针,然后将该指针作为函数返回值。

#include "stdio.h"

FILE * sub(void)
{
    FILE *fp1;
    fp1=fopen("test.txt","awt");//如果有选项a可以在保证文件的原有内容不丢失,新内容写在后面,如果没有a则会删除原有内容替换为新内容。
    return fp1;
}

void main(void)
{
    FILE *fp;
    fp = sub();
    fprintf(fp,"\n%s\n","测试文件指针子函数返回值返回到主函数中");
    fclose(fp);
}

 

第2.2种方式:我还想到了一种方式,但是这种方式运行时会出现错误。我想在主函数中定义一个文件指针fp1,然后定义一个子函数sub(FILE *fp),在这个子函数里是对形参fp进行操作,然后在主函数中用实参fp1代替形参fp来调用sub:

将上面运行时会出错的程序进行修改,让子函数sub返回一个文件指针并在主函数中fp1接收,就能正确运行了,不过这样做实际上是跟2.1方式重复了:

#include "stdio.h"

FILE * sub(FILE *fp)
{    
    fp=fopen("test.txt","awt");//如果有选项a可以在保证文件的原有内容不丢失,新内容写在后面,如果没有a则会删除原有内容替换为新内容。
    return fp;
}

void main(void)
{
    FILE *fp1;
    fp1 = sub(fp1);
    fprintf(fp1,"\n%s\n","测试文件指针子函数返回值返回到主函数中");
    fclose(fp1);
}

 

转载于:https://www.cnblogs.com/wuqi1003/archive/2013/01/23/2872659.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值