1 #include
2 #include
3
4
5 int main(void)
6 {
7 FILE *fp = NULL;
8 fp = fopen("/home/lv/file/filetest.c","r");
9 if(NULL == fp)
10 {
11 return -1;
12 }
13 const int MAX = 50;
14 char ch[50];
15 int i = 0;
16 while((ch[i] = getc(fp)) !=EOF)
17 {
18 putchar(ch[i]);
19 i++;
20 }
21 fclose(fp);
22 printf("get char : %s",ch);
23 fp = NULL;
24 return 0;
25 }
楼主 可以参考我这个代码吧EOF换位feof()函数试一下,应该没问题的
楼主,你的/home/lv/file/filetest.c"文件中有没有数字?EOF用来判断文件是否结束,如果是用来判断文本字符是可以的,不会有错;但是如果文件中
有数字,就会出现乱码的问题,因为二进制文件中数字可以有-1出现,所以若文件中有数字,则会出现乱码情况;解决方案是用feof()函数来判断文件
是否读写结束;feof()对文本文件和而二进制文件都是有效的。
/* ************************************************************************
* Filename: 07_feof.c
* Description:
* Version: 1.0
* Created: 2017年04月03日 14时44分56秒
* Revision: none
* Compiler: gcc
* Author: YOUR NAME (),
* Company:
* ************************************************************************/
#include <stdio.h>
void write_file()
{
FILE *fp = fopen("7.txt", "w");
fclose(fp);
}
int main()
{
//write_file();
FILE *fp;
fp = fopen("7.txt", "r");
if(fp == NULL)
{
perror("fopen");
return -1;
}
//判断文件是否结尾
while(1)
{
fgetc(fp);
//1、不做任何读操作,直接调用feof,没有意义,永远返回假,代表文件没有结束
//2、必须先读,读完后,fp内部成员发生变化,再判断才有结果
//3、调用feof()不会自动移动移动,它只做判断使用
if( feof(fp) ) //如果到文件结尾,返回真(非0),如果没有到文件结尾,返回假0
{
break;
}
else //假
{
printf("没有到文件结尾\n");
}
}
fclose(fp);
return 0;
}
楼主,我仔细看了你的代码,有很多不周到的地方,
(1)const int MAX = 50; char ch[50];其中MAX用来干嘛?定义数组的大小;那你可以直接char ch[MAX];
(2)定义了数组之后,应该养成良好的习惯,将其初始化为0,这样能够保证里面的数据不是垃圾值;
如:memset(ch,0,sizeof(ch));
char ch[MAX] = {0};
(3)printf("get char : %s",ch); 这会打印出数组中的所有元素,所以若你没与将数组进行初始化操作,里面完全可能出现垃圾值,这样你打印出来的数值就可能会是乱码。
另外:
楼主,相同的代码在不同的编译器下面或者是不同的版本下面可能会有一些差异的,我在我的ubuntu平台上,运行时第二行代码(当然我修改了文件名和内容)没有出现乱码;你可以参考我上面说的这两个去再调试调试;
楼主可以关注我的博客,大家相互学习,我也是搞linux开发的;