zoukankan      html  css  js  c++  java
  • 【原】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);
    }
  • 相关阅读:
    又玩起了“数独”
    WebService应用:音乐站图片上传
    大家都来DIY自己的Blog啦
    CSS导圆角,不过这个代码没有怎么看懂,与一般的HTML是不同
    网站PR值
    CommunityServer2.0何去何从?
    网络最经典命令行
    炎热八月,小心"落雪"
    Topology activation failed. Each partition must have at least one index component from the previous topology in the new topology, in the same host.
    SharePoint 2013服务器场设计的一些链接
  • 原文地址:https://www.cnblogs.com/wuqi1003/p/2872659.html
Copyright © 2011-2022 走看看