从函数返回FILE指针并在main - c上处理它

时间:2016-05-26 18:45:25

标签: c file pointers

我试图将文件指针从某个函数返回到" 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'使用

谢谢所有的人......

5 个答案:

答案 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();

希望有帮助!