在下面的代码中,行为是否未定义?
#include<stdio.h>
int main()
{
printf(7+"%c","sundaram");
}
它打印“aram”。无法理解。
最佳答案
这是未定义的行为。
C 中的字符串文字是指向一 block 预初始化内存的指针。
巧合的是,你的两个字符串文字占据了相邻的内存块。
当您将 7
添加到指向第一个文字的指针时,您最终指向下一个文字的中间。
你程序的数据在内存中是这样排列的:
%c\0sundaram\0 | | "%c" --^ | 7 + "%c" ------^
因此,您最终调用 printf
时将两个指针指向同一个字符串 ("adam", "sundadam")
并且没有格式说明符。
关于无法理解此 C 代码片段的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4628537/