繁体   English   中英

如何打印从文件中读取的包含特殊字符的字符串? 如何不带特殊字符打印?

[英]How to print a string, which includes special characters and was read from a file? How to print it without special characters?

我有以下功能:

int Printf(const char *s, int length)
{
   int i=0;
   while(i < length)      
   {
      printf("%c", s[i]);
      i++;
   }
}

但是,如果我使用从文件中读取的非空终止字符串(如“ Hello World \\ n”)来调用它,则它会打印Hello World \\ n而不会产生新行,因此会显式打印\\ n 我的功能出了什么问题?

没什么错,但是我想\\n本质上是字符串。 当您在C / C ++程序的字符串中写入\\n ,编译器将使用适当的换行符替换它。 但是,如果\\n在您的文本中(基本上是"\\\\n" ),则不会发生这种情况。

字符串设置在哪里? 似乎您可能必须自己处理转义的字符。

顺便说一句。 根据您的编译器,您应该可以使用如下所示的代码,这非常简单:

printf("%*s", length, s);

编辑:只需阅读您上面的评论。 如果您从文件中读取字符串,则必须自己处理\\n >换行符。 printf()不会为您处理。

特殊字符由编译器处理,而不由printf处理。 它们在编译时被转换,所以

char a[] = "a\n";

等于

char a[] = { 'a', 13, 0 };

printf从未看到“ \\ n”,编译器已将其预先转换为13。 而且printf不能转换特殊字符。 从文件中读取“ Hello World \\ n”时,不能指望编译器会转换它。

我已经重写了我的功能,所以:

int Printf(char *s, int length)
{
   int   i=0;
   char  c = '\0',
         special='\\',
         newline ='n', 
         creturn ='r', 
         tab     ='t';
   while(i < length)
   {
      if(c == special) 
      { 
         if( s[i] == newline )
            printf("\n"); 
         else if(s[i] == creturn)
            printf("\r"); 
         else if(s[i] == tab)
            printf("\t"); 
         else if(s[i] == special)
            printf("\\"); 
      } 
      else if (s[i] != '\\')
         printf("%c", s[i]); 
      c = s[i];
      i++;
   }
}

现在确实可以正常工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM