[英]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.