混乱的printf语句

flydown 2010-05-24 02:42:27
各位分析下这个语句
printf(&unix["\021%siz\012\0"], (unix)["have"] + "fun" - 0x60);

我在linux用gcc编译,运行结果:uniz
...全文
118 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaiershuaixu 2010-05-25
  • 打赏
  • 举报
回复
的确够“混乱”。
东莞某某某 2010-05-24
  • 打赏
  • 举报
回复
嫌看得累 呵呵
Boover 2010-05-24
  • 打赏
  • 举报
回复
受教了!
flydown 2010-05-24
  • 打赏
  • 举报
回复
这个分析够透彻

因为:数组str[n] <==>(n)[str]
所以:(unix)["have"] + "fun" - 0x60 <==> "have"[1]+"fun"-0x60
即: 'a'+"fun"-0x60
因为:'a' = 0x61
所以:变为“fun”+1
因为:“fun”是个char型指针
所以:指向“un”
因为:\021是一个八进制数,代表第一个字符
所以:&1["\021unix\012\0"]<==>"unix\012\0"
因为:012是八进制的换行,\0是字符串结束
所以:最终结果是
unix
dinjay 2010-05-24
  • 打赏
  • 举报
回复
编译器不同.....建议LZ不要过多的去研究这样的问题
huanmie_09 2010-05-24
  • 打赏
  • 举报
回复

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧