feof函数,fscanf函数,strtok函数等遇到的小疑惑解决办法
来源:互联网 发布:网页朗读软件 编辑:程序博客网 时间:2024/04/30 05:15
feof函数,fscanf函数,strtok函数等遇到的小疑惑解决办法
近几天我等几个小菜鸟要做一个快译通软件,简单实现根据英语查汉语,本人负责将dict.txt词库中的单词调入内存哈希表。现把自己在敲代码中遇到的几个问题及解决办法记录下来。
1.feof()函数用于判断是否读写到文件尾,会多执行一次的解决办法。
EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制),EOF的十进制为26,因此可以用EOF作为文件结束标志。
当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。
feof()函数判断文件是否结束,结束或者出错返回非零值,否则返回零。
C语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置,C语言的“feof()”函数返回的是最后一次“读操作的内容”。举个简单的例子,比如有人说“你走到火车的最后一节车厢”这就是位置。而如果说“一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。
解决办法:
while(1) .... if(feof(fp)) break;
2.fscanf()函数从文件中读取文本,遇到空格结束的解决办法。
char str[100];
fscanf(fp,"%[^\n]%*c",str);
正则表达式的运用,[]读取数据但只允许读取括号内的字符,[^]读取数据但不允许括号内的字符出现,上两行代码就是读到换行符才结束,%*c任意个字符。
3.函数调用导致对同一文件fclose()两次的错误。
我在主函数及调用函数中都添加了fclose(fp),运行提示对同一地址重复释放内存的错误。
4.while(1)的使用与#if 0 #endif的使用。
while(1)
{
跳出死循环的语句,如
if(i>25)
break;
}
#if 0
#endif
实现注释掉一块代码;
5.全局变量的运用。
静态全局变量只在所定义的源文件中起作用,非静态全局变量在整个源程序中起作用。
6.以"wb"方式打开fopen()文件,fwrite()文件是不是二进制,可不可以查看的问题。
如果你写入的是字符串,虽然你是以二进制方式写入的,但文本编辑器还是会去一个字节一个字节地解释文件,所以结果还是文本。但如果是int型数据,你用cat查看就是乱码,因为int型数据占四个字节。所以并不是所有的二进制文件都不能用cat命令查看。
7.strtok函数的使用。
一个以前的源代码:
#include <stdio.h>#include <string.h>int main(void){FILE *fp;char buf[256];char *p;char *token;char *a[7];fp=fopen("/etc/passwd","r");if(fp==NULL){perror("open:");return 1;}while((p=fgets(buf,256,fp))!=NULL){int i=0;token=strtok(p,":");printf("%s:",token);while((token=strtok(NULL,":"))!=NULL){a[i++]=token;}printf("%s\n",a[4]);}fclose(fp);return 0;}8.如果你想从标准输入中写一个带空格的字符串到字符数组中
例如:
char str[50];
printf("please input:\n");
getchar();
fgets(str,50,stdin) ;
我想说的getchar()的用法!
详细源代码等项目完成再上传。
- feof函数,fscanf函数,strtok函数等遇到的小疑惑解决办法
- fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结
- fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结
- fprintf fscanf等函数的用法
- fprintf fscanf等函数的用法
- fopen、fclose、feof、fputc、fgetc、fread、fwrite、ftell、fseek、fscanf函数的用法
- fscanf函数的使用
- fscanf函数的应用
- fscanf函数的应用
- fscanf函数的用法
- fscanf ()函数
- fscanf ()函数
- fscanf函数
- fscanf函数
- fscanf函数
- fscanf函数
- fscanf函数
- fscanf函数
- 栈 代码
- c# 将数组或集合 转换成以逗号分隔的字符串
- iOS Multithreading: Thread Safety in iOS Applications
- ssh项目下易宝支付的编码问题
- 双机热备常见问题解答
- feof函数,fscanf函数,strtok函数等遇到的小疑惑解决办法
- Java 字符串截取, 中文英文截取相同长途
- 中间件 东方通tongweb的使用
- 从驱动到转行到游戏开发的经验
- Microsoft Office Visio 2010如何创建UML 用例图
- 改变checkbox,使之可以像单选按钮一样使用
- SSG5简易配置命令及忘记登录密码和设备ip地址 的方法
- 如何一个android工程作为另外一个android工程的lib
- glassfish:Resource temporarily unavailable in tsStartJavaThread