求助!!求助!!求助!!求助!!

HScholar 2014-07-24 08:23:35
我最近在看《算法心得 高效算法的奥秘》这本书。但是里面有些看不懂。希望各位大神能给我解释下,或者告诉我相关的资料是什么,我自己看。
文中写 0x8000 0000 这个是用十六进制表示的位串, 这个我有些不明白是什么意思,求解答。
还有个代码是
#include<stdio.h>
void main()
{
char*p="main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c";(void)printf(p,34,p,34,10);
}

我完全看不懂,不知道为啥会这样,求解释。
...全文
234 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
FeelTouch Labs 2014-07-25
  • 打赏
  • 举报
回复
引用 2 楼 u012928672 的回复:
[quote=引用 1 楼 zxh707wk 的回复:]
#include <stdio.h>

int main()
{
    printf("main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,"main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,10);
    return 0;
}
这样能看懂吗?
我知道这个程序是原样输出,但是不知道为啥会有那样的效果。[/quote] 楼主我给你解答下吧,首先,你应该明白printf()的基本原理1,利用%*对输出的变量/常量进行格式控制;2,引号中的字符%*控制字符自然输出,那么开始讲解上面的程序: 自左向右; 第一:编译器首先打印出 main(){char*p=字符串因为不收%控制; 第二:寻找第一个%c的变量替换,34非字符常量,类型不符,所以没有输出;若位‘34’,则会相应输出一字符4,楼主可实验; 第三:寻找%s的变量替换,发现"main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c"恰为字符串类型,所以输出字符串。 第四:与第二原因相同,没有输出; 第五:与第一原因相同,不收%控制,直接输出;(void)printf(p,34,p,34,10);}。 第六:本质与第二、第四相同,没有输出。 所以就出现了你所说的效果。 若楼主认为我说的有道理,请支持一下
赵4老师 2014-07-25
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
707wk 2014-07-25
  • 打赏
  • 举报
回复
lz你这是根本没看书就来发帖问的吧
HScholar 2014-07-24
  • 打赏
  • 举报
回复
引用 1 楼 zxh707wk 的回复:
#include <stdio.h>

int main()
{
    printf("main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,"main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,10);
    return 0;
}
这样能看懂吗?
我知道这个程序是原样输出,但是不知道为啥会有那样的效果。
707wk 2014-07-24
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{
    printf("main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,"main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c",34,10);
    return 0;
}
这样能看懂吗?

69,382

社区成员

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

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