【原】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);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM