无法理解此 C 代码片段的输出

标签 c printf

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

#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/

相关文章:

C 对齐列 w/printf() w/每列后恰好有 2 个空格

c - Sprintf 连接字符串

c - sscanf() 跳过分隔符和宽度

c - 使用 c 格式化输出

c - 一个 C 文件在 Linux 中调用并运行另一个 C 文件

c++ - UTF-8、Unicode 以及机器如何解释字节?

c - 直接 io - 写入文件时 O_DIRECT 似乎不起作用

c - 实现 FCFS 调度程序

c - 在指针 C 中保存多个字符(动态内存)

c - 如何打印 fread()?