簡體   English   中英

從函數返回 FILE 指針並在 main 上處理它

[英]Return FILE pointer from function and work on it on main

我試圖將某個函數的FILE指針返回到main() 之后,我嘗試對指針執行一些fprintf操作,但沒有成功。 這是我的代碼:

我的功能:

FILE *create_file(void){

    FILE *regularTxt = NULL;
    regularTxt = fopen("MyLogExamplekkggggggk.txt", "wt");
    if (!regularTxt){
        printf("error with regtxt");
        getchar();
        return 1;
    }
    char first_part_string[] = "kkkkik";
    fprintf(regularTxt, "%s\n\n\n%s", "ttttg", "lklf");
    return regularTxt;
}

main功能:

int main(void)
{
    p_txt = create_file();
    fprintf(p_txt, "%s\n\n\n%s", "gggg", "lklf");
    return 0;
}

錯誤:

錯誤 92 錯誤 C4703:使用了可能未初始化的局部指針變量“p_txt”

沒有所有代碼,我無法解釋警告,但是如果在錯誤情況下從函數“返回1”,則無法正確初始化指針。

更改為此:

#include <stdio.h>
#include <stdlib.h>

FILE *create_file()
{
    FILE *regularTxt = NULL;
    regularTxt = fopen("MyLogExamplekkggggggk.txt", "wt");
    if (regularTxt) {
        char first_part_string[] = "kkkkik";
        fprintf(regularTxt, "%s\n\n\n%s", "ttttg", "lklf");
        return regularTxt;
    }
    return NULL; // error
}

int main(void)
{
    FILE* p_txt = create_file();
    if (p_txt == NULL)
    {
        printf("error with file");
        getchar();
        exit(1); // quit
    }
    fprintf(p_txt, "%s\n\n\n%s", "gggg", "lklf");
    return 0;
}

您似乎在這里將警告視為錯誤。 我認為您應該首先檢查返回值是否為NULL以使此錯誤消失:

FILE *p_txt = create_file();

if (! p_txt) {
    fprintf(stderr, "[!] Failed to open the file!\n");
    return 1;
} else {
    fprintf(p_txt, "%s\n\n\n%s", "gggg", "lklf");
}

同樣,當您進入if (!regularTxt) ,您是從返回指針的函數中返回一個。 最好返回NULL

如下工作,用NULL替換1以刪除下面顯示的編譯器警告。

#include <stdio.h>

FILE *get(){
  FILE *myfile = fopen("fio.txt", "wt");
  if(1 == 2){
    return 1;// this causes a warning, setting this to NULL removes the warning
  }
  return myfile;
}

int main(int argc, char **argv){
  FILE *fp = get();
  fprintf(fp, "hi there C\n");
}

fio.c:6:12:警告:與指針轉換不兼容的整數從結果類型為“ FILE *”(又名“ struct __sFILE *”)的函數返回“ int”; [-Wint-conversion]返回1; ^ 1個警告生成。

問題是當我沒有初始化指向NULL的指針的值時,編譯器擔心了...謝謝大家:)

我有同樣的問題。 解決了在函數調用中添加 CAST 的問題。 IE:在這個例子中,替換了這個:

p_txt = create_file();

有了這個:

p_txt = (FILE *) create_file();

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM