fgets()无法从txt文件里读出数据 | 您所在的位置:网站首页 › c语言文件读取不出来怎么回事 › fgets()无法从txt文件里读出数据 |
一、问题
源程序的目的是把cpp.txt文件里的内容一行一行的读出,并打印输出,但是一行也没有被读出来。 源程序如下: #include #include #include char *s; int main(){ FILE *f; if((f=fopen("cpp.txt","r"))==NULL) printf("文件打开失败!"); exit(0); } while(fgets(s,50,f)!=NULL)//fgets返回NULL时 ,读到文件末尾 { printf("%s",s); } fclose(f); return 0; } 二、问题解决首先,排除光标不在txt文件末尾的问题,因为无论光标在哪,fopen函数会自动把文件读指针放在文件开头。 其次,函数没有用错,函数的参数也没有用错。 错在对字符串的定义方式上,就是这一句 char *s;虽然char s[51]和 char *s这两种字符串的定义方式在本质上都是一样的(编译器都当做字符数组处理,因为C语言没有字符串这种变量),但是区别在于一个规定了字符串长度,一个没规定长度。 而fgets函数中要求第二个参数给出一次读取的字符个数: fgets(s,50,f)所以只能使用char s[51]这一种定义方式。并且定义时要注意,字符串长度要比fgets(s,50,f)里的第二个参数多一位,用来存放‘/0’。 正确程序: #include #include #include char s[51]; int main(){ FILE *f; if((f=fopen("cpp.txt","r"))==NULL) printf("文件打开失败!"); exit(0); } while(fgets(s,50,f)!=NULL)//fgets返回NULL时 ,读到文件末尾 { printf("%s",s); } fclose(f); return 0; } |
CopyRight 2018-2019 实验室设备网 版权所有 |