| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 592 人关注过本帖
标题:请教一段C的代码
收藏  订阅  推荐  打印
toyix
Rank: 2
等级:注册会员
帖子:97
积分:1144
注册:2008-7-14
请教一段C的代码

#include <windows.h>
#include <stdio.h>
#include <conio.h>
//#include <ctype.h>

int main()
{
    char buffer[100];
   
    printf("请输入序列号:\n");
   
    scanf( "%s", buffer );
   
    if ( my_strcmp( buffer, "SN12345" ) == 0 )
        printf("注册成功!\n");
    else
        printf( "注册失败!\n" );
   
    getche();
   
    return 0;
}

// 为了测试,代码并没有优化,并且还特意使用了三个局部变量
//
int my_strcmp( const char* pszSrc, const char* pszDest )
{
    char* pSrc = (char*)pszSrc;
    char* pDest = (char*)pszDest;
    int iResult = 0;
   
    for ( ; *pSrc != 0 && *pDest != 0 ; pSrc++, pDest++ )
    {
        iResult = *pSrc - *pDest;
        if ( iResult != 0 )
            return iResult;
    }
    return 0;
}
这个自定义函数的形参const char* pszSrc, const char* pszDest ,为什么要加上const,我式了 如果去掉也可以,
2008-7-25 13:17
病书生
Rank: 2
等级:注册会员
帖子:93
积分:1150
注册:2007-11-8

const 只是为了保护 原有的 数据不被破坏,是常量
如const x=2
那么 就不能在修改x的值啦,x=3,x=4之类都是错误的
2008-7-25 15:25
toyix
Rank: 2
等级:注册会员
帖子:97
积分:1144
注册:2008-7-14

谢谢
2008-7-25 20:18
missiyou
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:300
积分:2713
威望:7
注册:2007-10-9

*pSrc != 0 && *pDest != 0
应该是

*pSrc != '\0' && *pDest != '\0'
2008-7-25 20:23
hundnn
Rank: 2
等级:注册会员
帖子:107
积分:1232
注册:2007-8-23

#include <windows.h>

#include <conio.h>
这两个头文件是做什么的?怎么没见过?指点下
谢谢

人生若只如初见/何事秋风悲画扇
2008-7-25 20:25
hundnn
Rank: 2
等级:注册会员
帖子:107
积分:1232
注册:2007-8-23

引用:
missiyou 在 2008-7-25 20:23 的发言:

*pSrc != 0 && *pDest != 0
应该是

*pSrc != '\0' && *pDest != '\0'
说的对.'\0'是字符串结尾符./

人生若只如初见/何事秋风悲画扇
2008-7-25 20:28
jingjing54007
Rank: 1
等级:新手上路
帖子:4
积分:160
注册:2008-7-25

注意,这个代码存在巨大漏洞!!!你编译后回发现,只要输入“SN12345”中任意一个组合,就成功了!!
2008-7-25 21:17
zhaozhirui
Rank: 1
等级:新手上路
帖子:4
积分:140
注册:2008-7-24
回复 4# missiyou 的帖子

谢了!难怪我看了代码有少少疑问,开朗很多。
2008-7-26 03:52
lisatisfy
Rank: 2
等级:注册会员
帖子:44
积分:548
注册:2008-7-25

引用:
jingjing54007 在 2008-7-25 21:17 的发言:

注意,这个代码存在巨大漏洞!!!你编译后回发现,只要输入“SN12345”中任意一个组合,就成功了!!
没错
2008-7-26 14:52
missiyou
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:300
积分:2713
威望:7
注册:2007-10-9

引用:
missiyou 在 2008-7-25 20:23 的发言:

*pSrc != 0 && *pDest != 0
应该是

*pSrc != '\0' && *pDest != '\0'
看好,在这个程序中,还有一点点问题。首先是,如果我们这样
char *p="SN123456";
char *lp="SN1234567891012311321";
这个结果还是返回正确.因为上面的是同时成立.也就是只要前面相等.这样后面就略了.*pSrc != '\0' && *pDest != '\0'这里只要有一个不成立,像第二个元素比第一个多.但是只循环前面的,而后面的7891012311321不会遍历而这个也是比较范围,所以我觉得应该改成
*pSrc != '\0' || *pDest != '\0'

换成逻辑或  也正如上面所说的,那个SN123456 里面像  SN123 SN12 SN1 这些都成立
2008-7-26 19:56
共有 591 人关注过本帖
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.054298 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved