Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么只有多个";%&引用;printf是否接受?_C_Printf_Format Specifiers - Fatal编程技术网

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
被一个字符*噢,我明白了。对此我很抱歉,我是用法语学习的,所以我并不总是选择正确的翻译。没什么对不起的,没关系,我们理解。很乐意帮忙。