主题:求高手指点这个my_getline函数哪里出错 紧急!!!
ctryagain
[专家分:0] 发布于 2012-11-14 22:43:00
#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个回复)
沙发
bruceteen [专家分:42660] 发布于 2012-11-15 08:38:00
描述你的问题
板凳
ctryagain [专家分:0] 发布于 2012-11-15 08:44:00
我想输出每一行的字符个数 以及每一行的内容
但这个函数运行以后 总会有重复输出的行内容 且 每一行的内容输出的不全
3 楼
ctryagain [专家分:0] 发布于 2012-11-15 08:48:00
这个函数是运行时 在命令行 同时输入 ./a.out xx文件名
然后输出这个文件每一行的内容。
4 楼
bruceteen [专家分:42660] 发布于 2012-11-15 15:08:00
test
5 楼
bruceteen [专家分:42660] 发布于 2012-11-15 15:44:00
为什么没法跟贴
6 楼
bruceteen [专家分:42660] 发布于 2012-11-15 15:46:00
报错为:Micros
7 楼
bruceteen [专家分:42660] 发布于 2012-11-15 15:46:00
报错为:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]第 16 行: '\' 附近有语法错误。
/bbsaction.asp,行431
8 楼
bruceteen [专家分:42660] 发布于 2012-11-15 15:49:00
可以先随便回复几个字,然后再修改
9 楼
bruceteen [专家分:42660] 发布于 2012-11-15 15:49:00
上午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 楼
ctryagain [专家分:0] 发布于 2012-11-15 20:11:00
首先十分感谢你的帮助 但是还是希望你能够告诉我的问题出在了哪里 是逻辑的错误吗
我来回复