我正在尝试按顺序打开多个文件,使用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");
答案 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'