[英]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.