程序读取C中任意长度的输入行

时间:2013-09-23 18:19:20

标签: c input output

我希望它按原样打印输出。我当然使用这段代码

#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标签,但我不确切知道如何解决这个问题。

1 个答案:

答案 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) ......