首页
社区
课程
招聘
[讨论]C问题
发表于: 2007-11-10 17:56 4222

[讨论]C问题

2007-11-10 17:56
4222
#include <io.h>
#include <fcntl.h>

main()
{
        int i=0,k=2;
for(i*=k;;i++)//打死也不相乘。
{
        if(i>100)return;
        printf("%d\n",i);
       
}
if(i<=100 || i>100){printf("sssss");} //打死不输出,原先是用if(1)printf("sssss");也一样不行
return;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 437
活跃值: (273)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
2
1,进入for 循环 初始 i *= k  得到i = 0        i *= k紧在进入for循环执行一次
2,结束条件永远为假 所以程序不会离开for循环,所以不会输出下面的 sssss,所以结果只是输出 0 到 100
3,把你的程序用我的VC++ 8.0编译下再OD下得到
00401000 >/$  56            PUSH ESI
00401001  |.  33F6          XOR ESI,ESI
00401003  |>  56            /PUSH ESI                                ; /<%d>
00401004  |.  68 FC604000   |PUSH OFFSET 1234.??_C@_03PMGGPEJJ@?$CFd>; |format = "%d
"
00401009  |.  E8 0D000000   |CALL 1234.printf                        ; \printf
0040100E  |.  83C4 08       |ADD ESP,8
00401011  |.  46            |INC ESI
00401012  |.  83FE 64       |CMP ESI,64
00401015  |.^ 7E EC         \JLE SHORT 1234.00401003
00401017  |.  33C0          XOR EAX,EAX
00401019  |.  5E            POP ESI
0040101A  \.  C3            RETN

编译器非常的聪明  还原成C语言 得到

for(i = 0; i <= 0x64 ;i++){
  printf("%d\n",i);
}                                        也就是你的程序起作用部分
2007-11-10 18:37
0
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PFC
3
#include <io.h>
#include <fcntl.h>

main()
{
        int i=1,k=2;
for(i=i*k;;i++)//原来这是0与别的数相乘。
{
        if(i>100)break; //是的啊自己搞错了,用break就可以的,要是用RETURN就直接退出
        printf("%d\n",i);
       
}
if(1){printf("sssss");}
return;
}
2007-11-11 08:30
0
游客
登录 | 注册 方可回帖
返回
//