通过c中的函数传递文件

时间:2017-03-31 19:50:40

标签: c function file pointers

现在每当我运行它时,它会打开一个“制作文件”标签,并向我显示错误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);



    }

}

1 个答案:

答案 0 :(得分:0)

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

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

用法:generateFile(fname, &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);

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

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