关于字符串中的%和\的输出问题。
2019-11-22 16:42 047 阅读(462) 评论(0) 收藏 举报
#include<stdio.h>
int main(void)
{
char ch1[10]="%%%%%";
char ch2[10]="%%";
char ch3[10]="%";
char ch4[10]="%1";
char ch5[10]="%1111";
char ch6[10]="%1111%";
char ch7[10]="%%1111";
puts(ch1);
puts(ch2);
puts(ch3);
puts(ch4);
puts(ch5);
puts(ch6);
puts(ch7);
printf("---------\n");
printf("%%%%%\n");
printf("%%\n");
printf("%\n");
printf("%1\n");
printf("%1111\n");
printf("%1111%\n" );
printf("%%1111\n");
printf("---------\n");
printf("%s","%%%%%\n");
printf("%%\n");
printf("%s","%\n");
printf("%s","%1\n");
printf("%s","%1111\n");
printf("%s","%1111%\n" );
printf("%s","%%1111");
return 0;
}
上面这段代码的输出为
%%
%
%1
%1111
%1111%
%%1111
---------
%%
%
%1111
%
%
%1
%1111
%1111%
%%1111
由上面的结果可以看出,用不同的方式来输出含有%的字符串,得到的结果不相同。
第一种方法和第三种方法本质上是一样的,第一种方法是先申请一块内存空间,放入一个字符串(以'\0'结尾)再将其搬到字符数组里面。
第三种的方法的话,因为字符串常量本身的值是一个地址,它告诉了%s这块内存空间的首地址,于是%s就会打印直到‘ \0’之前的所有字符。
那么中间的第二种方法呢?
本身没有利用%s来打印字符串,而在里面不能直接地打印‘%’。在这时候两个%连在一起,才算是一个%。如果只有一个%,则%号以及%后的字符不会输出,即使在这串字符后加上了%,
中间夹着的非%字符也不会打印出来,而是单单打印一个%。倘若连续两个%连在一起后面在加上一串字符,则会输出一个%加上这一串字符。
PS:
目前我尚且不知道原因,先在这里将规律总结出来,算是挖了一个坑吧,以后填上。
ADD:
关于 \ :
另外,如果你要输出 \ ,不论你以上述何种形式进行打印 \ 都要以双数存在。
浙公网安备 33010602011771号