mygetline 实现

xiaoxiao2021-02-28  112

#include <stdio.h> #include <stdlib.h> #include <string.h> ssize_t mygetline(char **lineptr, size_t *n, FILE *stream) { if(*lineptr==NULL){ *n=50; *lineptr=malloc(*n); } int ch; int i=0; while(1){ ch=fgetc(stream); if(ch==EOF) return -1; if(i > *n){ *n+=50; *lineptr=realloc(*lineptr,*n); } *(*lineptr+i)=ch; i++; if(ch=='\n'){ *(*lineptr+i)='\0'; return i; } } return i; } void mygetline_free(char **lineptr) { if(*lineptr != NULL) { free(*linefree); } } int main(int argc,char **argv) { FILE *fp; char *line = NULL; size_t line_size = 0; if(argc < 2) { fprintf(stderr,"Usage...\n"); exit(1); } fp = fopen(argv[1],"r"); if(fp == NULL) { perror("fopen()"); exit(1); } while(1) { if(mygetline(&line,&line_size,fp) < 0) break; printf("line_size = %d\n",line_size); printf("%d\n",strlen(line)); printf("%s\n",line); } fclose(fp); mygetline_free(line); exit(0); }
转载请注明原文地址: https://www.6miu.com/read-51865.html

最新回复(0)