关于字符串中的%和的输出问题。#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:
关于 \ :
另外,如果你要输出 \ ,不论你以上述何种形式进⾏打印 \ 都要以双数存在。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。