| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1445 人关注过本帖
标题:请教一段C的代码
只看楼主 加入收藏
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
结帖率:50%
收藏
 问题点数:0 回复次数:11 
请教一段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-07-25 13:17
病书生
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2007-11-8
收藏
得分:0 
const 只是为了保护 原有的 数据不被破坏,是常量
如const x=2
那么 就不能在修改x的值啦,x=3,x=4之类都是错误的
2008-07-25 15:25
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
收藏
得分:0 
谢谢
2008-07-25 20:18
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:531
专家分:218
注 册:2007-10-9
收藏
得分:0 
*pSrc != 0 && *pDest != 0
应该是

*pSrc != '\0' && *pDest != '\0'
2008-07-25 20:23
hundnn
Rank: 1
等 级:新手上路
帖 子:123
专家分:0
注 册:2007-8-23
收藏
得分:0 
#include <windows.h>

#include <conio.h>
这两个头文件是做什么的?怎么没见过?指点下
谢谢
2008-07-25 20:25
hundnn
Rank: 1
等 级:新手上路
帖 子:123
专家分:0
注 册:2007-8-23
收藏
得分:0 
[bo][un]missiyou[/un] 在 2008-7-25 20:23 的发言:[/bo]

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

*pSrc != '\0' && *pDest != '\0'


说的对.'\0'是字符串结尾符./
2008-07-25 20:28
jingjing54007
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-7-25
收藏
得分:0 
注意,这个代码存在巨大漏洞!!!你编译后回发现,只要输入“SN12345”中任意一个组合,就成功了!!
2008-07-25 21:17
zhaozhirui
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-7-24
收藏
得分:0 
回复 4# missiyou 的帖子
谢了!难怪我看了代码有少少疑问,开朗很多。
2008-07-26 03:52
lisatisfy
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2008-7-25
收藏
得分:0 
[bo][un]jingjing54007[/un] 在 2008-7-25 21:17 的发言:[/bo]

注意,这个代码存在巨大漏洞!!!你编译后回发现,只要输入“SN12345”中任意一个组合,就成功了!!

没错
2008-07-26 14:52
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:531
专家分:218
注 册:2007-10-9
收藏
得分:0 
[bo][un]missiyou[/un] 在 2008-7-25 20:23 的发言:[/bo]

*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-07-26 19:56
快速回复:请教一段C的代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034438 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved