即使给出不同的文件名作为参数,使用fopen()的函数也会保持打开同一个文件

时间:2013-05-02 11:16:42

标签: c fopen

我正在尝试按顺序打开多个文件,使用fopen(),只打印内容并计算字符数。 在main()中,我使用不同的文件名调用该函数两次,但该函数只打印第一个文件两次的内容。当然,这两个文件都存在,并且只调用一次这个函数会打印正确的内容;用两个文件测试。多次调用函数时似乎有问题。

有人可以给我一个提示吗?可能有什么不对?

我的功能:

void open_and_read(char file_name[80]){     
    char c;
    int buf_length = 16384;
    char buf[buf_length];
    char* buf_pointer;
    int i = 0;
    FILE *file_pointer;
    file_pointer = fopen(file_name,"r");
    buf_pointer = buf;
    if(file_pointer==NULL){
        printf("Error: File %s not opened!", file_name);
    }
    else {
        while(c!=EOF && i<(buf_length-1)){
            c = fgetc(file_pointer);
            *buf_pointer = c;
            buf_pointer++;
            i++;
        } 
        buf_pointer--;
        *buf_pointer = 0;
        printf("The file %s contains the follwing: \n%s", file_name, buf);
        printf("char-count: %i\n", i);
    }
    if(fclose(file_pointer)!=0){
        printf("File was not closed!");
    }
    else {
        printf("File was successfully closed!"); 
    }
}

主要():

int main(){
    open_and_read("/home/x201/dev/IB/data/line1.dat");
    open_and_read("/home/x201/dev/IB/data/line2.dat");

4 个答案:

答案 0 :(得分:3)

char c;

这不会在任何地方初始化。试试char c = '\0'

修改

如果您使用

,那将非常合适
   while(((c = fgetc(file_pointer))!= EOF) && i<(buf_length-1))

无需初始化c。您将从fgetc本身收到其价值 在你第一次进入循环之前。

答案 1 :(得分:0)

如果你的文件是空的,你的“buf_pointer--;”将指向SOMETHING;

答案 2 :(得分:0)

使用char c =&#39; \ 0&#39;;

由于char c未初始化,因此自动变量将包含垃圾。

答案 3 :(得分:0)

这里的问题是char变量“c”。 在第二次调用函数EOF时它将是open_and_read并且它不会进入while循环,并且将不会读取并显示先前文件包含的sencond文件的包含。

对此的解决方案是: -

  

char c ='\ 0'