【问题标题】:open a file in C inside a function and use it outside [closed]在函数内部用 C 语言打开一个文件并在外部使用它[关闭]
【发布时间】:2015-12-27 13:54:04
【问题描述】:

试图在 c: 函数中打开文件:

int main(int argc, char *argv[]){

    // check args
    FILE *input = NULL;
    FILE *output = NULL;
    checkArgs(argc, argv, &input, &output);

   if (input != NULL){
       paresInputFile(input);
   }else{
      printf("NULL");
   }


void checkArgs(int argc, char *argv[], FILE **output, FILE **input){
    // validate arguments...
    *input = fopen(argv[2],"r");
    return;
}

我得到了一些命令行参数.. 我正在使用一个验证它们的函数,如果它们没问题,我会尝试打开 2 个文件,一个用于输出,一个用于输入,

如何在我的 checkArgs 函数之外使用这些打开的文件, 我现在这样做的方式是,它们在我的主函数中是不可访问的 - 我得到 NULL,如果我尝试从我的 checkArgs 函数中访问该文件,它工作正常

【问题讨论】:

  • 我想这可以说明为什么通常不推荐使用所谓的“输出参数”:它会让人很难直接看到函数的实际作用。此代码的替代方法可能是使 checkArgs 函数按值返回 struct args { FILE *input; FILE *output; }...

标签: c file pointers


【解决方案1】:

您的函数定义了首先传递的output,然后定义了input,但是在调用函数时您正在反向传递指针。

【讨论】:

  • 哇! thx..愚蠢的错误..盯着它看了很长时间,没有看到它
【解决方案2】:

您刚刚将输入传递给输出,反之亦然。 更正了您的程序,如下所示。它应该可以工作。

int main(int argc, char *argv[]){

    // check args
    FILE *input = NULL;
    FILE *output = NULL;
    checkArgs(argc, argv,  &output,&input,);//corrected this line 

   if (input != NULL){
       paresInputFile(input);
   }else{
      printf("NULL");
   }


void checkArgs(int argc, char *argv[], FILE **output, FILE **input){
    // validate arguments...
    *input = fopen(argv[2],"r");
    return;
}

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2017-06-16
    • 1970-01-01
    • 2012-04-16
    相关资源
    最近更新 更多