首页
社区
课程
招聘
[讨论]《0day安全:软件漏洞分析技术第2版》的一个错误?
发表于: 2011-9-15 18:59 28897

[讨论]《0day安全:软件漏洞分析技术第2版》的一个错误?

2011-9-15 18:59
28897
在《oday安全:软件漏洞分析技术第2版》这本书中,29页,1.4节有一个CRACK小实验,现将代码贴出来,如下,其中显示的字符串提示我已经改成中文。

#include <stdio.h>
   
#define PASSWORD "1234567"
int verify_password (char *password)
{
                   int authenticated;
                   authenticated=strcmp(password,PASSWORD);
                   return authenticated;
}
main ( )
  {
                   int valid_flag=0;
                   char password[1024];
                   while(1)
                   {
                            printf ("请输入密码:          ");
                            scanf ("%s",password);
                            valid_flag = verify_password (password);
                            if (valid_flag)
                            {
                                  printf ("密码错误!\n\n");
                            }
                              else
                            {
                                  printf ("密码正确!\n");
                                    break;
                             }
                     }
   }           

用VC6.0编译出现错误提示如下:
error C2065: 'strcmp' : undeclared identifier

我虽然不会任何一门高级语言,但是以前也自学过VB,VF,VC,C ,但都是学了一点,一知半解的样子,所以去百度一下,发现原因如下:strcmp函数需要 #include<string.h> 头文件支持,于是乎在头文件中加入这一行代码:#include <string.h> ,然后编译,顺利通过!

请问这是什么原因,是作者无心的失误还是我哪里做的不对?没别的意思,只是觉得对于新手学习起来挺不容易的,只是想搞明白这个问题!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 138
活跃值: (475)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
strcmp 函数的声明在 string.h 中, 因此在使用strcmp时 需要包含string.h 头

作者那编译通过 可能是工程配置和你的不一样吧;
2011-9-15 20:41
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
还是要自己多动手多练的,可以崇拜,但不要太迷信
2012-2-21 16:22
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也遇到这个问题了··加上#include<string.h>编译通过
但是输入密码不管正确还是错误都是刷屏
please input password; incorrect password!
代码和你的基本一样 我照着书来的
#include <stdio.h>
#include<string.h>
#define PASSWORD "1234567"
int verify_password (char *password)
{
        int authenticated;
                authenticated=strcmp(password,PASSWORD);
                return authenticated;
}
main()
{
int valid_flag=0;
char password[1024];
while (1)
{
        printf("please input password;   ");
                scanf("%$",password);
                valid_flag=verify_password(password);
        if(valid_flag)
        {
                printf("incorrect password!\n\n");
        }
        else
        {
        printf("Congratulation!You hava passed the verification!\n");
        break;
        }
}
}
2013-8-4 11:20
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主保存的是C++文件吧,把源程序文件扩展名改为c试试。作者说过了代码是C代码。
2013-10-9 10:32
0
雪    币: 349
活跃值: (125)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
那个。。纠正一下,文件后缀应该叫.c文件!
2014-12-6 00:06
0
游客
登录 | 注册 方可回帖
返回
//