C语言写getline(节省空间)

来源:互联网 发布:jsp的java代码 编辑:程序博客网 时间:2024/05/23 01:11

getline功能:

将文件中的数据读取一行,存储在堆中,形成一个字符串。根据字符串个数分配120个空间,不够就加120,直到能存下为止。返回字符串首地址。并且存储所分配的空间和字符串长度。我将空间分配改成20个,不够再加20,知道能存下字符串为止。

#include <stdio.h>#include <stdlib.h>#include<string.h>ssize_t mygetline(char** line , size_t* len , FILE* fa){int i = 0;char* ch = NULL;char* sp = NULL;*line=malloc(20);*len=20;ch = fgets(*line,20,fa);if(ch==NULL)return EOF;for(i=0;i<20;i++)if((*line)[i]=='\n')return strlen(*line);while(ch!=NULL){*len+=20;*line=realloc(*line,*len);sp = *line+*len-21;ch = fgets(sp,21,fa);for(i=0;i<20;i++)if(sp[i]=='\n')return strlen(*line);}return EOF;}int main(void){FILE * fp;char * line = NULL;size_t len = 0;ssize_t read;fp = fopen("a.txt", "r");if (fp == NULL)exit(EXIT_FAILURE);while ((read = mygetline(&line, &len, fp)) != EOF) {printf("len: %d\n", len);printf("Retrieved line of length %u :\n", read);printf("%s", line);}if (line)free(line);exit(EXIT_SUCCESS);}


0 0
原创粉丝点击