麻烦C语言高手帮忙看看这个程序 这是我自己写的实现getline函数的功能函数 但输出的结果不是正确的

2024-12-30 03:56:16
推荐回答(1个)
回答1:

错误1: 在mygetline中连续使用2次fgetc导致每行首字符无法显示 错误2: 由错误1间接导致死循环,变更main中while循环退出条件为linesize<=0 问题3: mygetline返回值与形参size_t *n表示为每行的字节数,意义重复,变更函数返回值为行号 如此即可: #include #include #define maxsize 20 static size_t mygetline(char **lineptr, size_t *n, FILE *stream) { size_t count=0; static size_t line_no=0; /*add line number*/ int buf; if(*lineptr == NULL)/*// free(*lineptr); */ { *n=maxsize; *lineptr = malloc(*n); } /*if((buf=fgetc(stream))==EOF){ return -1; } Error00: use fgetc twice, the first ch is omitted*/ while((buf=fgetc(stream))!=EOF) { if(buf=='\n') { line_no++; break; } count++; *(*lineptr+count-1)=buf; *(*lineptr+count)='\0'; if(*n<=count) *lineptr=realloc(*lineptr,count*2); } *n=count; /*make sure *n is the real number of char in each line*/ return line_no; } int main(int argc,char *argv[]) { FILE *fp; char *linebuf; size_t linesize; int n; fp = fopen(argv[1],"r"); if(fp == NULL) { perror("fopen()"); exit(1); } linebuf = NULL; linesize = 0; while(1) { n= mygetline(&linebuf,&linesize,fp); if(linesize <= 0) break; /*printf("%d\n",n);*/ printf("%d[%3d]: %s\n",n,(int)linesize,linebuf); } if(linebuf) free(linebuf); fclose(fp); return 0; }