归一化之readline学习

char* readline(FILE *input)
{
	int len;

	if(fgets(line,max_line_len,input) == NULL)
		return NULL;

	while(strrchr(line,'\n') == NULL)
	{
		max_line_len *= 2;
		line = (char *) realloc(line, max_line_len);
		len = (int) strlen(line);
		if(fgets(line+len,max_line_len-len,input) == NULL)
			break;
	}
	return line;
}

fgets函数解释:

从流中读一行或指定个字符, 原型是char *fgets(char *s, int n, FILE *stream);从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。

  形参注释:*s结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针

  例:如果一个文件的当前位置的文本如下

  Love ,I Have

  But ........

  如果用 

  fgets(str1,4,file1);

  则执行后str1="Lov",读取了4-1=3个字符,

  而如果用 

  fgets(str1,23,file1);

  则执行str1="Love ,I Have",读取了一行(包括行尾的'\n',并自动加上字符串结束符'\0')。

strrchr用法:

strrchr() 函数查找字符在指定字符串中从后面开始的第一次出现的位置,如果成功,则返回指向该位置的指针,如果失败,则返回 false。

语法

  strrchr(string,char)

posted @ 2011-11-15 21:09  hailong  阅读(294)  评论(0编辑  收藏  举报