我在c中得到了意想不到的输出。有人能解释为什么吗? #包括 int main() { INTA; printf(“%..geeksforgeks..%”); getchar(); 返回0; }
输出:我在c中得到了意想不到的输出。有人能解释为什么吗? #包括 int main() { INTA; printf(“%..geeksforgeks..%”); getchar(); 返回0; },c,C,输出:%.0.geeksforgeks..% 有人能解释一下原因吗?在printf格式的字符串中,%用于表示转换的开始,例如整数的%d或浮点的%f 如果您试图打印出实际的百分号,请在格式字符串中使用%% 或者,如果要将其打印为文字字符串,请不要将其作为格式字符串提供: #include<stdio.h> int main() { int a; printf("%..geeksforgeeks..%"); getchar(); return 0; } 在printf格式字符串中,%
%.0.geeksforgeks..%
有人能解释一下原因吗?在printf格式的字符串中,
%
用于表示转换的开始,例如整数的%d
或浮点的%f
如果您试图打印出实际的百分号,请在格式字符串中使用%%
或者,如果要将其打印为文字字符串,请不要将其作为格式字符串提供:
#include<stdio.h>
int main()
{
int a;
printf("%..geeksforgeeks..%");
getchar();
return 0;
}
在printf格式字符串中,
%
用于表示转换的开始,例如整数的%d
或浮点的%f
如果您试图打印出实际的百分号,请在格式字符串中使用%%
或者,如果要将其打印为文字字符串,请不要将其作为格式字符串提供:
#include<stdio.h>
int main()
{
int a;
printf("%..geeksforgeeks..%");
getchar();
return 0;
}
我不知道为什么会得到这个精确的输出,但问题是使用
%
作为元字符,因此如果要打印文字百分号,必须将其加倍
printf("%s", "%..geeksforgeeks..%");
或者,不要使用printf
打印文字字符串:
printf("%%..geeksforgeeks..%%\n")
从技术上讲,在
printf
字符串中有比附加参数(要格式化的项)的数量更多的“活动”(未加倍)%符号会触发未定义的行为,这意味着C库可以做任何它想做的事情,从轻微的令人惊讶的行为,比如这样的行为,到并包括使整个计算机崩溃。我不知道为什么会得到这个精确的输出,但问题是使用%
作为元字符,所以如果要打印文字百分号,必须将其加倍
printf("%s", "%..geeksforgeeks..%");
或者,不要使用printf
打印文字字符串:
printf("%%..geeksforgeeks..%%\n")
从技术上讲,在
printf
字符串中有比附加参数(要格式化的项)的数量更多的“活动”(未加倍)%符号会触发未定义的行为,这意味着C库可以做任何它想做的事情,从轻微的令人惊讶的行为,比如这样的行为,到甚至导致整个计算机崩溃。%%
需要一个参数,使用%%
打印百分号。请尝试printf(“%%…geeksforgeks..%%”)代码>为%。可能是某种printf标志?%。是一个精确标识符。可能与此有关。我最好的猜测是,%..g
被视为%g
,第一个浮点参数寄存器恰好包含零,但我不知道为什么在零上有一个前导的%.
。我不想深入挖掘;过度研究未定义的行为可以告诉你关于C实现的有趣的事情,但在这里我认为它没有那么有用。%%
需要一个参数,使用%%
打印百分号。试试printf(“%%…geeksforgeks….%%”)代码>为%。可能是某种printf标志?%。是一个精确标识符。可能与此有关。我最好的猜测是,%..g
被视为%g
,第一个浮点参数寄存器恰好包含零,但我不知道为什么在零上有一个前导的%.
。我不想深入挖掘;过度研究未定义的行为可以告诉你关于C实现的有趣的事情,但在这里我认为它并没有那么有用。