Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        6年前关闭。
                                                                                            
                
        
我希望它按原样打印输出。我现在正在使用此代码

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

最佳答案

您应该使用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)

09-06 17:02