欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

LINUX学习之《转换说明和转义序列》

程序员文章站 2022-06-22 17:48:40
有一道习题:在printf的格式化字符串中怎么表示一个%字符?我们留在后面解决关于转义字符:例如:/和其意思是将反斜杠/或百分号%后面的字符转变成为另外的意义。...

有一道习题:在printf的格式化字符串中怎么表示一个%字符?我们留在后面解决。

 

关于转义字符:

例如:\%

其意思是将反斜杠\或百分号%后面的字符转变成为另外的意义。

关于转义序列:

在格式化字符串中(eg:printf(“ character: %c\n integer: %d\n floating point: %f\n”,'{', 34, 3.14); 中的“”部分),\号后面加上字母n表示换行意义的转移序列。

转义序列

意义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

\\

代表一个反斜线字符''\'

092

\'

代表一个单引号(撇号)字符

039

\"

代表一个双引号字符

034

\? 代表一个问号 063

\0

空字符(NUL)

000

\ddd

1到3位八进制数所代表的任意字符

三位八进制

\xhh

十六进制所代表的任意字符

十六进制

关于转换说明:

在格式化字符串中(eg:printf(“ character: %c\n integer: %d\n floating point: %f\n”,'{', 34, 3.14); 中的“”部分),%号后面加上字母c、d、f分别表示字符型、整型和浮点型的转换说明转换说明只在格式化字符串中占个位置,并不出现在最终的打印结果中,这种用法通常叫做占位符。

转换说明

意义

 

%a(%A) 

浮点数、十六进制数字和p-(P-)记数bai法(C99)

 

%c

字符

 
%d 有符号十进制整数  
%f 浮点数(包括float和doulbe)  
%e(%E)      浮点数指数输出[e-(E-)记数法]  
%g(%G)      浮点数不显无意义的零"0"  
%i 有符号十进制整数(与%d相同)  
%u 无符号十进制整数  
%o 八进制整数    e.g.     0123  
%x(%X)       十六进制整数0f(0F)   e.g.   0x1234  
%p         指针  
%s 字符串  
%% %  

转义序列与转换说明的一些区别:

  • 转义序列是在编译时处理的,而转换说明是在运行时调用printf函数处理的。

    源文件中的字符串字面值是“ character: %c\n integer: %d\n floating point: %f\n” ,\n占两个字符,而编译之后保存在可执行文件的字符串中\n已经被替换成一个换行符,而%c等不变,然后在运行时这个字符串被传给printf,printf再把其中的%c、%d、%f解释成转换说明。

有时候不同类型的数据很容易弄混,例如:“5”、‘ 5 ’ 、5 。如果你注意了它们的界定符就会很清楚,第一个是字符串字面值;第二个是字符;第三个是整数。

再来看看这道习题:在printf的格式化字符串中怎么表示一个%字符?

答:只需要重复百分号:%%。

#include <stdio.h>

int main()
{
    printf("%%/n");
    return 0;
}

用printf输出%之所以困难是因为%正是printf的转义字符。任何时候printf遇到%,它都会等待下一个字符,然后决定如何处理。而双字符序列%%就被定义成了单独的%字符。

要理解为什么\%不行,得知道反斜杠\是编译器的转义字符,它控制编译器在编译时对源代码中字符的解释。而这里我们的问题是printf如何在运行时(因为是要打印出%)控制它的格式串。在编译器看来,\%可能没有定义或者代表一个%字符。就算printf会对\特殊处理,\和%在printf中都有效的可能性也不大。

参考资料链接:

https://book.51cto.com/art/200901/106878.htm

https://baike.baidu.com/item/转义序列/2482443

本文地址:https://blog.csdn.net/weixin_44189360/article/details/107303278