C 为什么只有多个";%&引用;printf是否接受?
下面的程序给出输出C 为什么只有多个";%&引用;printf是否接受?,c,printf,format-specifiers,C,Printf,Format Specifiers,下面的程序给出输出%%。为什么? #include <stdio.h> int main() { //code printf("%%%%"); return 0; } #包括 int main(){ //代码 printf(“%%”); 返回0; } 输出: %% TL;DRa%是printf()的有效转换说明符 引用第§7.21.6.1章中关于转换说明符的C11 每个转换规范都由字符%引入。在%之后 按顺序出现: -一种转换说明符字符,用于指定要应用
%%
。为什么?
#include <stdio.h>
int main() {
//code
printf("%%%%");
return 0;
}
#包括
int main(){
//代码
printf(“%%”);
返回0;
}
输出:
%%
TL;DRa
%
是printf()
的有效转换说明符
引用第§7.21.6.1章中关于转换说明符的C11
每个转换规范都由字符%
引入。在%
之后
按顺序出现:
-一种转换说明符字符,用于指定要应用的转换类型
并且,从第8段开始,将%
作为转换说明符字符
对于%
转换说明符
%
写入了%
字符。不转换任何参数。完整的
转换规范应为%%
您的代码有一对
%%
s。Printf
函数的第一个参数是格式,由字符*
表示,它不是字符串
这就是为什么要打印int
,例如,您必须编写“%d”
。因此,%
是一个特殊字符,如果您仅将%
作为格式编写,编译器将不会高兴,因为它正在等待%
之后的内容(d、p、x、s、f等)
然而,写%%
意味着“给我打印一个转义的%”。这就是为什么%%%%
打印%%
编辑:如果您想要一个能准确打印您所提供内容的函数,可以使用write
:
char* mystr = "%%%%";
write(STDOUT_FILENO, mystr, strlen(mystr));
请展示您迄今为止的研究/调试工作。请先阅读第页。Printf函数的第一个参数是由char*表示的格式,而不是字符串。
。。你能详细说明一下吗?So%是一个特殊字符
。从技术上讲,它表示转换说明符的开始。我的意思是,当调用printf时,char*
不是直接写入的,而是预处理的,因此每个特殊的字符序列都会被替换。例如,%s
被一个字符*噢,我明白了。对此我很抱歉,我是用法语学习的,所以我并不总是选择正确的翻译。没什么对不起的,没关系,我们理解。很乐意帮忙。