我希望它按原样打印输出。我当然使用这段代码
#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标签,但我不确切知道如何解决这个问题。
答案 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)
......