在输出printf语句时遇到麻烦

An *_*eur 1 c printf pointer-arithmetic post-increment

我在理解以下代码片段的输出时遇到了一些麻烦。

#include<stdio.h>
int main()
{
    char *str;
    str = "%d\n";
    str++;
    str++;
    printf(str-2, 300);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码的输出为300。

我知道直到printf语句前的行str指向字符- %。我需要帮助的是理解为什么printf打印300功能。

dbu*_*ush 5

权之前printfstr没有指向%,但到\n

++操作者递增的值str,以指向所述阵列中的下一个字符。由于执行了两次,因此指向\n。当您传递str-2给时printf,它将创建一个指向的指针%。这样就printf看到"%d\n"导致300按预期方式打印的字符串。