【问题标题】:Program to read input lines of any length in C [closed]在 C 中读取任意长度的输入行的程序 [关闭]
【发布时间】:2013-09-28 18:06:45
【问题描述】:

我希望它按原样打印输出。目前我正在使用此代码

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

【问题讨论】:

  • 是的,我已经能够弄清楚如何从输出中读取和打印,以及如何摆脱空白和制表符,但我终生无法弄清楚如何摆脱 html 标签
  • 这个问题肯定不会帮助你,因为它是为了别的东西。

标签: c input output


【解决方案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)...

【讨论】:

  • 为什么使用fgets?它对长于询问的字符串的行为是documented:如果分配的大小足以以返回结束,它会这样做。否则你最后会得到一个 NULL 字符,并且没有返回。优点:它适用于 任何 行长度。缺点:您需要对那些“比假定的更长”的字符串进行一些记账(请参阅 OP 的目标)。
猜你喜欢
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 2014-12-19
相关资源
最近更新 更多