我在c ...中得到了意想不到的输出。谁能解释为什么?

时间:2013-06-10 15:23:14

标签: c

#include<stdio.h>
int main()
{
int a;
printf("%..geeksforgeeks..%");

getchar();
return 0;
}

输出:%.0.geeksforgeeks..%

谁能解释为什么???

2 个答案:

答案 0 :(得分:4)

在printf格式字符串中,%用于表示转换的开始,例如%d表示整数,%f表示浮点数。

如果您尝试打印实际的百分号,请在格式字符串中使用%%

或者,如果要将其作为文字字符串打印,请不要将其作为格式字符串提供:

printf("%s", "%..geeksforgeeks..%");

答案 1 :(得分:1)

我不确定为什么会得到这个确切的输出,但问题是printf使用%作为元字符,所以如果要打印文字百分号,你必须加倍。

printf("%%..geeksforgeeks..%%\n")

或者,不要使用printf来打印文字字符串:

fputs("%..geeksforgeeks..%\n", stdout);

从技术上讲,在printf字符串中有更多“实时”(未加倍)%符号而不是附加参数(要格式化的项目)的数量会触发未定义行为,意味着允许C库执行它想要的任何内容,从这种轻微的令人惊讶的行为,包括崩溃你的整个计算机。