我试图将文件指针从某个函数返回到" 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;
}
主要:
int main(void)
{
p_txt = create_file();
fprintf(p_txt, "%s\n\n\n%s", "gggg", "lklf");
return 0;
}
错误:
谢谢所有的人......错误92错误C4703:可能未初始化的本地指针变量' p_txt'使用
答案 0 :(得分:2)
如果没有所有代码我都无法解释警告,但是当您在错误情况下从函数“返回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;
}
答案 1 :(得分:1)
您似乎将警告视为错误。我认为您应首先检查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
。
答案 2 :(得分:0)
以下工作原理,用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 *'的函数返回'int'(又名'struct __sFILE *')[--Wint-conversion] 返回1; ^ 生成了1个警告。
答案 3 :(得分:0)
问题是因为当我没有将指针的值初始化为NULL时,比较者担心...谢谢你们:)
答案 4 :(得分:0)
我有同样的问题。 解决了在函数调用中添加CAST的问题。 I.E .:在此示例中,替换为:
p_txt = create_file();
与此:
p_txt = (FILE *) create_file();
希望有帮助!