回 帖 发 新 帖 刷新版面

主题:求高手指点这个my_getline函数哪里出错  紧急!!!

#include <stdio.h>
#include <stdlib.h>
#define maxsize 20


static ssize_t  mygetline(char **lineptr, size_t *n, FILE *stream)
{
        ssize_t count=0;
        int buf;


        if(*lineptr == NULL)
// free(*lineptr);
{
*n=maxsize;
        *lineptr = malloc(*n);
}


if((buf=fgetc(stream))==EOF)
{
return -1;
}

while((buf=fgetc(stream))!=EOF)
{
if(buf=='\n')
{    
    count+=1;
        break;
}


count++;


*(*lineptr+count-1)=buf;
*(*lineptr+count)='\0';

if(*n<=count)
*lineptr=realloc(*lineptr,count*2);
}


return count;
}


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)
{
if((n= mygetline(&linebuf,&linesize,fp)) < 0)
break;
printf("%d\n",n);
printf("%s\n",linebuf);
}
if(linebuf)
free(linebuf);


fclose(fp);
return 0;
}




回复列表 (共10个回复)

沙发

描述你的问题

板凳


我想输出每一行的字符个数 以及每一行的内容
但这个函数运行以后 总会有重复输出的行内容 且 每一行的内容输出的不全

3 楼


这个函数是运行时 在命令行 同时输入 ./a.out xx文件名
然后输出这个文件每一行的内容。

4 楼

test

5 楼

为什么没法跟贴

6 楼

报错为:Micros

7 楼

报错为:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]第 16 行: '\' 附近有语法错误。
/bbsaction.asp,行431 

8 楼

可以先随便回复几个字,然后再修改

9 楼

上午bbs出问题了,跟贴就报错
现在我懒得指出你的错误了,按你的逻辑重写了一个
使用gcc 4.7.2,加编译参数-std=c99编译测试通过
[code=c]
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 20

int mygetline( char **lineptr, size_t *n, FILE *stream )
{
    int count = 0;
    int buf;
    for( ; (buf=fgetc(stream))!=EOF; ++count )
    {
        if( buf == '\n' )
            break;

        if( *n <= count+1u )
        {
            *n = (*n>MAXSIZE?*n:MAXSIZE)*2;
            *lineptr = (char*)realloc( *lineptr, *n );
        }
        lineptr[0][count] = buf;
    }

    if( buf==EOF && count==0 )
        return -1;

    lineptr[0][count] = '\0';
    return count;
}

int main(int argc,char *argv[])
{
    FILE *fp = fopen( argv[1], "r" );
    if( fp == NULL )
    {
        perror("fopen()");
        return 1;
    }

    char *linebuf = NULL;
    size_t linesize = 0;
    for( int n; n=mygetline(&linebuf,&linesize,fp), n>=0; )
    {
        printf( "%d: %s\n", n, linebuf );
    }
    free( linebuf );

    fclose(fp);
    return 0;
}
[/code]

10 楼


首先十分感谢你的帮助 但是还是希望你能够告诉我的问题出在了哪里 是逻辑的错误吗

我来回复

您尚未登录,请登录后再回复。点此登录或注册