鱼C论坛

 找回密码
 立即注册
查看: 9467|回复: 99

出一个题目,考验下大家。(仅限纯C语言)

  [复制链接]
发表于 2012-6-27 22:28:41 | 显示全部楼层 |阅读模式
4鱼币
题目要求(在下面一段代码中if(。。。)这个括号中添加代码,使得此程序执行的时候实现,用户输入多少,就再屏幕上打印出多少个hello word!
代码如下:
void fun()
{
int s;
printf("hello word!\n");
if(......)               //此处添加代码
{
fun();
}
}
void main()
{
int a=0;
scanf("%d",&a);
fun();
}
只能在if后面的括号内添加代码,其余地方不能修改。。。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-27 22:53:30 | 显示全部楼层
没有参数传递,能实现?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 22:58:23 | 显示全部楼层
:funk:这个真的可以吗???:funk:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 23:00:42 | 显示全部楼层
没参数传递真能做么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-27 23:00:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-27 23:01:42 | 显示全部楼层
clm~~ 发表于 2012-6-27 22:58
这个真的可以吗???

这个真的可以的。。。其实对于懂的人,很简单。。。  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 23:18:21 | 显示全部楼层
求解!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 00:11:36 | 显示全部楼层
本帖最后由 莱瑞古德 于 2012-6-28 00:14 编辑
  1. #include<stdio.h>
  2. void fun()
  3. {
  4. int s;
  5. printf("hello word!\n");
  6. if(s=*(int*)((int)&s+0x58)-1)               //此处添加代码
  7. {
  8. fun();
  9. }
  10. }
  11. void main()
  12. {
  13. int a=0;
  14. scanf("%d",&a);
  15. fun();
  16. }
复制代码
以上,win7编译通过,经某XP网友证实,XP也能编译通过可以达到题目的要求,但不知道是不是楼主的答案类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 07:48:40 | 显示全部楼层
莱瑞古德 发表于 2012-6-28 00:11
以上,win7编译通过,经某XP网友证实,XP也能编译通过可以达到题目的要求,但不知道是不是楼主的答案类型

XP下失败 死循环了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 07:50:37 | 显示全部楼层
如果LZ的技术性是指这种带破坏性质的 那就没什么意思了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 08:03:05 | 显示全部楼层
我是师兄 发表于 2012-6-28 07:50
如果LZ的技术性是指这种带破坏性质的 那就没什么意思了

实际上就是要设法获得a的地址。因为没有传参过程,至于死循环- -,,
题目本身没有提供获取main地址的途径。。。。。so,直接- -写出了偏移
我让我好友- -编译 过了,运行是正确的,
- -当然如果你用的是非VC6
可能 。。。。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 08:11:45 | 显示全部楼层
莱瑞古德 发表于 2012-6-28 08:03
实际上就是要设法获得a的地址。因为没有传参过程,至于死循环- -,,
题目本身没有提供获取main地址的途 ...

这已经不是纯C语言了~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 08:13:54 | 显示全部楼层
我是师兄 发表于 2012-6-28 08:11
这已经不是纯C语言了~~~

就是纯C呗- -我可没有内联汇编
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 08:14:28 | 显示全部楼层
这就是指针的一种用法 - -,直接转化整数为指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 08:27:43 | 显示全部楼层
莱瑞古德 发表于 2012-6-28 08:13
就是纯C呗- -我可没有内联汇编

不是这个的问题 你这样做 对运行环境有特殊要求[VC编译啊 win下啊 等等] C对运行环境可没这样的要求
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 08:32:18 | 显示全部楼层
我是师兄 发表于 2012-6-28 08:27
不是这个的问题 你这样做 对运行环境有特殊要求[VC编译啊 win下啊 等等] C对运行环境可没这样的要求

算了- -,哥就要断网了,断网了,断网了,
希望- -今天- -楼主还存在(在11:00之前)
否则我就永远的离开了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-28 08:59:48 | 显示全部楼层
莱瑞古德 发表于 2012-6-28 00:11
以上,win7编译通过,经某XP网友证实,XP也能编译通过可以达到题目的要求,但不知道是不是楼主的答案类型

唉!没想到这帖子挺火哦。 其实这个题目你已经算是对了,如果单纯考虑答案的话,不过有人说的对,你用到了一个伟大的定律,那就是传说中的 0x58定律,这让我想起了,曾经的我,因为计算出了这个0x58定律,实现了一个不限定参数函数,高兴了好几天。但是最后发现,这个东西只能限定在特定的编译器,特定的运行环境。在保证这种规律不变的情况下。。。还有,在主函数里面,若是多定义一个变量,这个0x58也会变化(当然我说了,题目代码不改变) 。所以,若后面再没人给出更完美的答案,就给分了。。。若没人能给出更完美的答案,还是有些失望的。。。完了我会给出正确答案。。。你可以继续想想。。。其实你已经做的差不多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-28 09:01:29 | 显示全部楼层
longdeqidao 发表于 2012-6-27 23:18
求解!!!!!!!!!!!

若是到明天还是没人能给出完美的答案。我会解的。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 09:03:44 | 显示全部楼层
  1. #include <stdio.h>

  2. void fun()
  3. {
  4.         int s;
  5.         printf("hello word!\n");
  6.         if( s = --(&s)[22] )               //此处添加代码
  7.         {
  8.                 fun();
  9.         }
  10. }
  11. void main()
  12. {
  13.         int a=0;
  14.         scanf("%d",&a);
  15.         fun();
  16. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 09:04:49 | 显示全部楼层
这个不如帖袄汇编版.表面C是,其实是汇编的.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 02:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表