2013-09-23 17 views
-5

我希望它能够按原样输出。 Curently我使用此代码程序读取任意长度的输入行C

#include <stdio.h> 
#include <ctype.h> 
#define BUFFER_SIZE 2000 
int main(void) 
{ 
    char buffer[BUFFER_SIZE]; 
    while(fgets (buffer, BUFFER_SIZE, stdin) !=NULL) 
    { 
    printf("%s",buffer); 
} 
return 0; 
} 

然后,我希望程序能够跳过HTML标签的原文,但我不知道到底如何解决这一点。

+2

这是功课吗? –

+0

是的,我已经能够弄清楚如何从输出读取和打印,以及如何摆脱空白和制表符,但我不能为我的生活弄清楚如何摆脱html标签 – user2767528

+0

这个问题肯定不会帮助你在这个努力,因为它是为了别的。 –

回答

1

您应该使用getline(3)(至少在Posix兼容系统上)。基于fgets的代码不适用于很长的行(因为很长的行会被“截断”:所有的行都会被读取,但只有BUFFER_SIZE个字符会被复制,而其余行将被忽略)。

你可以编码

char* linebuf=NULL; 
size_t linesize=0; 
while (!feof(stdin)) { 
    ssize_t linelen = getline(&linebuf, &linesize, stdin); 
    if (linelen<0) { perror("getline"); exit(EXIT_FAILURE); }; 
    fputs(linebuf, stdout); 
} 

在上面的代码中,将linebuf(除非失败)生长到最宽的行大小。你应该free(linebuf)在那个循环之后...

+0

为什么不*使用'fgets'?它的行为在长于要求的字符串上[记录](http://www.cplusplus.com/reference/cstdio/fgets/):如果分配的大小足以以返回结束,它就会这样做。否则你在最后得到一个NULL字符,并且不会返回。 Pro:它可以处理*任何*行长度。 Con:你需要为那些“长于假定”的字符串做一些记录(见OP的目标)。 – usr2564301