【问题标题】:Passing a file through a function in c通过c中的函数传递文件
【发布时间】:2017-08-26 04:40:11
【问题描述】:

现在,每当我运行它时,它都会打开一个“制作文件”选项卡,并给我一个错误提示 something wrong with line 25 from that tab。不确定它是否是我通过它的方式。

另一个问题是如果我将文件命名为“Anything”,它将显示为“A@@”

谢谢 (关闭文件只是为了测试它)

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

void generateFile(char,FILE);
void inputFile(int,FILE);
void printFile();


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

    char fname;
    int max_num;

    srand(time(NULL));

    printf("Enter file name \n");
    scanf("%c", &fname);

    printf("Enter max_num \n");
    scanf("%d",&max_num);

    FILE *fp;

    generateFile(fname,*fp);
    inputFile(max_num,*fp);




    return 0;
}

void generateFile(char fname,FILE *fp){


    fp = fopen( &fname, "w");

    fprintf(fp,"Testing");



    return;
}

void inputFile(int max_num, FILE *fp){

    int i,array[25];

    for(i=0;i<max_num;i++){
        array[i] = rand() % 100 + 50;
        fprintf(fp,"%d\n",array[i]);

        fclose(fp);



    }

}

【问题讨论】:

  • fname 应该是 char * 而不是 char
  • 查看您的函数原型,并将它们与函数的定义(实现)进行比较。论据不匹配。而且您应该永远按值传递FILE
  • 另外,搜索并阅读关于在 c 中模拟通过引用传递generateFile 函数不会像你希望的那样做。我建议返回 FILE*
  • 好的,谢谢!生病了,然后回复你! @Someprogrammerdude

标签: c function file pointers


【解决方案1】:

您错误地传递了fp。您可以通过引用传递:

void generateFile(char *fname, FILE **fp)
    *fp = fopen(fname, "w");
    // Check for error....
    fprintf(*fp, "Testing");
    return;
}

用法:generateFile(fname, &amp;fp);

或者,我更喜欢让函数返回一个指针:

FILE * void generateFile(char *fname) {
    FILE *fp = fopen(fname, "w");
    // Check for error....
    fprintf(fp, "Testing");
    return fp;
}

用法:FILE *fp = generateFile(fname);

名称应作为char *const char * 传递。

另外,在下一次调用中,只需传递指针:

inputFile(max_num, fp);

而且,您还应该检查文件是否已成功打开。

并且,从for 循环中删除fclose(fp);,否则只有第一次写入会成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2014-10-04
    • 1970-01-01
    • 2011-07-12
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多