printf在传递较少参数时的行为

ama*_*man 0 c printf

我刚刚注意到printf函数的不同行为,通过更改no.参数和格式说明符.请看下面的代码:

#include<stdio.h>
void main()
{ int ji=65;
  printf("ji>=65 ? %d : %c",ji);
 }
Run Code Online (Sandbox Code Playgroud)

输出结果是ji> = 65?65:A
打印的字符是A
但是如果代码是:

#include<stdio.h>
void main()
{ int ji=65,y;
  printf("ji>=65 ? %d : %c",ji);
  printf("%d",y)
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下打印的字符是heart(ascii值3),y的值是12803.

如何通过编译器拾取字符值??? 请帮忙

hmj*_*mjd 9

printf()发布的代码中的调用导致未定义的行为:

printf("ji>=65 ? %d : %c",ji); /* One less argument than required for
                                  the supplied format. */
Run Code Online (Sandbox Code Playgroud)

从第7.19.6.1开始,C99标准的fprintf功能:

fprintf函数将输出写入stream指向的流,在指向格式的字符串的控制下,该格式指定后续参数如何转换为输出.如果格式的参数不足,则行为未定义.如果参数保留时格式已用尽,则会评估多余的参数(一如既往),否则将被忽略.当遇到格式字符串的末尾时,fprintf函数返回.

此行为也适用于printf()函数(sprintf()snprintf()函数).