0

我正在尝试使用 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

4 回答 4

3
char c;

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

编辑

如果你会使用这将是非常合适的

   while(((c = fgetc(file_pointer))!= EOF) && i<(buf_length-1))

将不需要初始化cfgetc在您第一次进入循环之前,您将从自身收到它的值。

于 2013-05-02T11:25:42.530 回答
0

使用 char c ='\0';

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

于 2013-05-02T11:28:13.897 回答
0

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

于 2013-05-02T11:23:40.803 回答
0

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

解决方案是: -

字符 c='\0'

于 2013-05-02T11:41:16.893 回答