无法理解这个C片段的输出

Dau*_*aud 0 c printf

在以下代码中,行为是否未定义?

#include<stdio.h>
int main()
{
printf(7+"%c","sundaram");  
}
Run Code Online (Sandbox Code Playgroud)

它印刷"aram".无法理解如何.

SLa*_*aks 6

这是未定义的行为.

C中的字符串文字是指向预初始化内存块的指针.
巧合的是,你的两个字符串文字占用了相邻的内存块.
当您添加7到第一个文字的指针时,您最终指向下一个文字的中间.

您的程序数据按如下方式排列在内存中:

       %c\0sundaram\0
       |       |
"%c" --^       |
7 + "%c" ------^

因此,最终调用printf两个指向同一字符串的指针,("adam", "sundadam")而不是格式说明符.