-5

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

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

4

1 回答 1

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)在那个循环之后......

于 2013-09-23T18:21:02.163 回答