精华内容
下载资源
问答
  • javascript检测密码弱强

    千次阅读 2012-03-01 15:53:19
    系统管理员 >> 密码修改 用 户 名: QQ用户__7066FB0026CFDD7AB0C3F944D600C8BB 旧 密 码: 新 密 码:     重复密码: 重置" onMouseO
    <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#1A74A6">
    <tr>
    <td bgcolor="#FFFFFF">
    <table width="100%" border="0" cellpadding="4" cellspacing="1" bgcolor="#FFFFFF">
    <tr>
    <td colspan="3" background="/images/admin/bg.gif" class="fontw" id="tit"><strong>系统管理员 >> 密码修改</strong></td>
    </tr>
    <form action="edit-savepass.asp" method="post" name="form1" id="form1">
    <tr>
    <td bgcolor="#C5E0F3">用 户 名:</td>
    <td bgcolor="#C5E0F3">QQ用户__7066FB0026CFDD7AB0C3F944D600C8BB</td>
    <td bgcolor="#C5E0F3"><div id="copsw"></div></td>
    </tr>
    <tr>
    <td bgcolor="#C5E0F3">旧 密 码:</td>
    <td bgcolor="#C5E0F3"><input name="opsw" type="password" class="inp" id="opsw" onFocus="this.className='focus'" onBlur="this.className='inp';out_opsw()" size="40" maxlength="16" style="width:240px;"/></td>
    <td bgcolor="#C5E0F3"><div id="copsw"></div></td>
    </tr>
    <tr>
    <td bgcolor="#C5E0F3">新 密 码:</td>
    <td bgcolor="#C5E0F3"><input name="admin_psw" type="password" class="inp" id="admin_psw" onFocus="this.className='focus'" onBlur="this.className='inp';pwStrength(this.value);out_admin_psw()" onKeyUp="pwStrength(this.value)" size="40" maxlength="16" style="width:240px;"/></td>
    <td bgcolor="#C5E0F3"><div id="cadmin_psw"></div></td>
    </tr>
    <tr>
    <td bgcolor="#C5E0F3"> </td>
    <td bgcolor="#C5E0F3"><table width="180" border="0" cellspacing="1" cellpadding="1">
    <tr bgcolor="#EFEFEF">
    <td align="center" id="strength_L">弱</td>
    <td align="center" id="strength_M">中</td>
    <td align="center" id="strength_H">强</td>
    </tr>
    </table></td>
    <td bgcolor="#C5E0F3"> </td>
    </tr>
    <tr>
    <td bgcolor="#C5E0F3">重复密码:</td>
    <td bgcolor="#C5E0F3"><input name="admin_psw1" type="password" class="inp" id="admin_psw1" onFocus="this.className='focus'" onBlur="this.className='inp';out_admin_psw1()" size="40" maxlength="16" style="width:240px;"/></td>
    <td bgcolor="#C5E0F3"><div id="cadmin_psw1"></div></td>
    </tr>
     
    <tr>
    <td colspan="3" bgcolor="#C5E0F3"><div id="msg"></div></td>
    </tr>
    <tr>

    <td colspan="3" bgcolor="#C5E0F3"><input name="go" type="submit" class="button_1" id="go" value="提交" onMouseOver="this.className='button_2'" onMouseOut="this.className='button_1'"><input name="reset" type="reset" class="button_1" id="reset" value="重置" onMouseOver="this.className='button_2'" onMouseOut="this.className='button_1'"/></td></tr></form></table></td></tr></table><SCRIPT language="javascript" event="onkeydown" for="document"> if(event.keyCode==13&&event.srcElement.type!='button'&&event.srcElement.type!='submit'&&event.srcElement.type!='reset'&&event.srcElement.type!='textarea'&&event.srcElement.type!='')pswc();</SCRIPT></body></html>

    <script language="javascript"> 
    //CharMode函数
    //测试某个字符是属于哪一类.
    function CharMode(iN){
    if (iN>=48 && iN <=57) //数字
    return 1;
    if (iN>=65 && iN <=90) //大写字母
    return 2;
    if (iN>=97 && iN <=122) //小写
    return 4;
    else
    return 8; //特殊字符
    }
    //bitTotal函数
    //计算出当前密码当中一共有多少种模式
    function bitTotal(num){
    modes=0;
    for (i=0;i<4;i++){
    if (num & 1) modes++;
    num>>>=1;
    }
    return modes;
    }
    //checkStrong函数
    //返回密码的强度级别
    function checkStrong(sPW){
    if (sPW.length<=6)
    return 0; //密码太短
    Modes=0;
    for (i=0;i<sPW.length;i++){
    //测试每一个字符的类别并统计一共有多少种模式.
    Modes|=CharMode(sPW.charCodeAt(i));
    }
    return bitTotal(Modes);
    }
    //pwStrength函数
    //当用户放开键盘或密码输入框失去焦点时,根据不同的级别显示不同的颜色
    function pwStrength(pwd){
    O_color="#eeeeee";
    L_color="#FF0000";
    M_color="#FF9900";
    H_color="#33CC00";
    if (pwd==null||pwd==''){
    Lcolor=Mcolor=Hcolor=O_color;
    }
    else{
    S_level=checkStrong(pwd);
    switch(S_level) {
    case 0:
    Lcolor=Mcolor=Hcolor=O_color;
    case 1:
    Lcolor=L_color;
    Mcolor=Hcolor=O_color;
    break;
    case 2:
    Lcolor=Mcolor=M_color;
    Hcolor=O_color;
    break;
    default:
    Lcolor=Mcolor=Hcolor=H_color;
    }
    }
    GE("strength_L").style.background=Lcolor;
    GE("strength_M").style.background=Mcolor;
    GE("strength_H").style.background=Hcolor;
    return;
    }
    </script>
    
    


     
    
    

    展开全文
  • 1.符号与符号 对C/C++而言,编译器默认函数和初始化了的全局变量为符号。未初始化的全局变量为符号。此处符号与符号均是针对定义来说的,不是针对符号的引用。也可以通过GCC的 “__attribute__((weak))...

    1.弱符号与强符号

    对C/C++而言,编译器默认函数和初始化了的全局变量为强符号。未初始化的全局变量为弱符号。此处弱符号与强符号均是针对定义来说的,不是针对符号的引用。也可以通过GCC的 “__attribute__((weak))”来定义任何一个强符号为弱符号。

     

    [cpp] view plain copy
    1. extern in ext;  
    2. int weak;  
    3. int strong = 1;  
    4. __attribute__((weak)) int weak2 = 1;  
    5.   
    6. int main()  
    7. {  
    8.     return 0;  
    9. }  


    其中,强符号为:strong 与 main,弱符号为 :weak 与 weak2,而ext 即非强符号与非弱符号,因为它是一个外部变量的引用。针对强弱符号,链接器会根据下述规则来选择被多次定义的全局符号:

    1.不允许强符号被多次定义。否则链接器报错:符号重复定义

    2.如果符号在某个文件中是强符号,在其他文件中是弱符号,则选择强符号

    3.如果一个符号在所有文件中都是弱符号,则选择其中占用空间最大的。如弱符号 weak 在 A 文件中定义为double,在文件B中定义为 int, 则在链接A,B时,weak 的大小为 double的大小。

     

    2.弱引用与强引用

    强引用:目标文件引用了外部符号,在链接时若未找到定义则报错;则对该外部符号的引用为强引用

    弱引用:目标文件引用了外部符号,在链接时若未找到定义也不报错;则对该外部符号的引用为弱引用。

    对弱引用,编译器一般默认其值为0,在GCC中,使用“__attribute__((weak))”来声明对一个外部符号的引用为弱引用。通常对弱引用的使用方式如下:

     

    [cpp] view plain copy
    1. __attribute__((weak)) void func();  
    2.   
    3. int main()  
    4. {  
    5.       if(foo) foo();  
    6. }  

     

    3.弱符号与弱引用的作用:

    如:库中定义的弱符号可以被用户定义的强符号覆盖,从而使程序可以使用自己定义版本的库函数

    如:库中定义的某些扩展功能模块的引用定义为弱引用,当我们将扩展模块与程序链接在一起时,正常运行;当我们去掉某些扩展模块时,程序也正常链接,只是缺少了相应功能

     

    http://blog.csdn.net/virtual_func/article/details/48554379

    展开全文
  •  为所有变量指定数据类型称为“类型”, /类型是指类型检查的严格程度的。语言有无类型,类型和强类型三种。无类型的不检查,甚至不区分指令和数据。类型的检查很,仅能严格的区分指令和数据。类型的...


    强类型:

           为所有变量指定数据类型称为“强类型”, 强/弱类型是指类型检查的严格程度的。语言有无类型,弱类型和强类型三种。无类型的不检查,甚至不区分指令和数据。弱类型的检查很弱,仅能严格的区分指令和数据。强类型的则严格的在编译进行检查。



    强引用:

        如何保证一个对象在释放后不会再被访问?最简单的是使用引用计数的智能指针,但是强引用会导致对象不会被释放,那么弱引用如何?弱引用允许对象被释放,弱引用必须先转成强引用才能对对象进行操作,如果转换失败,则表示对象已经被删除。


    弱引用:

        在计算机语言中,弱引用可以使垃圾回收器回收内存,而不像强引用,如果引用被判定为弱引用可达,那么被回收器回收,如果一个对象只具有弱引用,那就类似于可有可无的生活用品。弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。


    展开全文
  • C语言符号,引用 符号定义 在编程中我们经常碰到符号重复定义的情况,当我们在同一个作用域内重复定义同一个变量时,有时是因为误写,有时是文件之间的冲突,编译器的处理方式就是报错: redefinition ...

    C语言强、弱符号,强、弱引用

    符号定义

    在编程中我们经常碰到符号重复定义的情况,当我们在同一个作用域内重复定义同一个变量时,有时是因为误写,有时是文件之间的冲突,编译器的处理方式就是报错:

    redefinition of 'xxx'

    注意,这里针对于同一作用域才会有冲突,如果是不同作用域,比如全局和局部,即使是相同变量名,也是不会报错,编译器会默认根据一定的优先级处理,总是更小作用域的变量覆盖更大作用域的变量,前提是这两个变量的作用域是包含与被包含的关系。

    初学C语言的朋友对于作用域的划分有一定的误解,认为函数是划分作用域的界限,函数外的就是全局,函数内的就是局部。
    事实上,在C语言中,作用域的分类方式是代码块作用域和文件作用域,文件作用域即定义在函数之外的的变量可以跨文件访问,代码块作用域指的是由花括号限定的作用域,它不仅仅限于函数体,在C99中将其扩展到了for,while,if语句所控制的代码,甚至可以在函数内以单独的花括号存在,我们不妨看看以下的示例:
    示例1:

    int main()
    {
        {
            int x=1;
        }
        x = 2;
    }

    编译输出的结果是:

    error: ‘x’ undeclared (first use in this function)

    示例2:

    for(int i=0;i<4;i++){}
    i = 1

    输出的结果是:

    error: ‘x’ undeclared (first use in this function)

    在C语言中,我们可以简单地认为花括号是文件内作用域的分隔符。

    强符号和弱符号

    在同一作用域下不能定义同一个变量或函数,很多C语言学习者都理所当然地这么认为。

    这个其实是是有所偏颇的,GNU C对标准C语言进行了扩展,在GCC中,对于符号(在编译时,变量和函数都被抽象成符号)而言,存在着强符号和弱符号之分。
    是的,是否支持这个特性是由不同的C语言标准决定的。

    对于C/C++而言,编译器默认函数和已初始化的全局变量为强符号,而未初始化的全局变量为弱符号,在编程者没有显示指定时,编译器对强弱符号的定义会有一些默认行为,同时开发者也可以对符号进行指定,使用"attribute((weak))"来声明一个符号为弱符号。

    定义一个相同的变量,当两者不全是强符号时,gcc在编译时并不会报错,而是遵循一定的规则进行取舍:

    • 当两者都为强符号时,报错:redefinition of 'xxx'
    • 当两者为一强一弱时,选取强符号的值
    • 当两者同时为弱时,选择其中占用空间较大的符号,这个其实很好理解,编译器不知道编程者的用意,选择占用空间大的符号至少不会造成诸如溢出、越界等严重后果。

    在默认的符号类型情况下,强符号和弱符号是可以共存的,类似于这样:

    int x;
    int x = 1;

    编译不会报错,在编译时x的取值将会是1.

    但是使用__attribute__((weak))将强符号转换为弱符号,却不能与一个强符号共存,类似于这样:

    int __attribute__((weak)) x = 0;
    int x = 1;

    编译器将报重复定义错误。

    强引用和弱引用

    除了强符号和弱符号的区别之外,GNUC还有一个特性就是强引用和弱引用,我们知道的是,编译器在编译阶段只负责将源文件编译成目标文件(即二进制文件),然后由链接器对所有二进制文件进行链接操作。

    在分离式编译中,当编译器检查到当前使用的函数或者变量在本模块中仅有声明而没有定义时,编译器直接使用这个符号,将工作转交给链接器,链接器则负责根据这些信息找到这些函数或者变量的实体地址,因为在程序执行时,程序必须确切地知道每个函数和全局变量的地址。如果没有找到该符号的实体,就会报undefined reference错误,这种符号之间的引用被称为强引用.

    编译器默认所有的变量和函数为强引用,同时编程者可以使用__attribute__((weakref))来声明一个函数,注意这里是声明而不是定义,既然是引用,那么就是使用其他模块中定义的实体,对于函数而言,我们可以使用这样的写法:

    __attribute__((weakref)) void func(void);

    ,然后在函数中调用func(),如果func()没有被定义,则func的值为0,如果func被定义,则调用相应func,在《程序员的自我修养》这本书中有介绍,它是这样写的:

    __attribute__((weakref)) void func(void);
    void main(void)
    {
        if(func) {func();}
    }

    但是在现代的编译系统中,这种写法却是错误的,编译虽然通过(有警告信息),但是却不正确:

    warning: ‘weakref’ attribute should be accompanied with an ‘alias’ attribute [-Wattributes]

    警告显示:weakref需要伴随着一个别名才能正常使用。

    既然书籍有版本问题,那么唯一的办法就是去查,在官方文档中是这样指出的:

    The weakref attribute marks a declaration as a weak reference. Without arguments, it should be accompanied by an alias attribute naming the target symbol. Optionally, the target may be given as an argument to weakref itself. In either case, weakref implicitly marks the declaration as weak. Without a target, given as an argument to weakref or to alias, weakref is equivalent to weak.
    At present, a declaration to which weakref is attached can only be static.

    贴出稍为重要的部分,通俗地解释就是:

    • weakref需要伴随着一个别名,别名不需要带函数参数,如果对象函数没有定义,我们可以使用别名来实现函数的定义工作,如果不指定别名,weakref作用等于weak。在后面我们会给出相应的示例以助理解。
    • weakref的声明必须为静态。

    强/弱符号和强/弱引用的作用

    这种弱符号、弱引用的扩展机制在库的实现中非常有用。我们在库中可以使用弱符号和弱引用机制,这样对于一个弱符号函数而言,用户可以自定义扩展功能的函数来覆盖这个弱符号函数。

    同时我们可以将某些扩展功能函数定义为弱引用,当用户需要使用扩展功能时,就对其进行定义,链接到程序当中,如果用户不进行定义,则链接也不会报错,这使得库的功能可以很方便地进行裁剪和组合。

    应用示例

    在示例中,我们使用一个静态库作为示例,来展现弱符号和弱引用的用法。

    弱符号的使用

    test.c:

    #include <stdio.h>
    void __attribute__((weak)) weak_func(void)
    {
        printf("defualt weak func is running!\n");
    }
    
    void test_func(void)
    {
        weak_func();
    }

    test.h:

    void test_func(void);

    main.c:

    #include <stdio.h>
    #include "test.h"
    
    void weak_func(void)
    {
        printf("custom strong func override!\n");
    }
    
    int main()
    {
        test_func();
        return 0;
    }

    将test.c编译成静态库;

    gcc -c test.c
    ar -rsc libtest.a test.o

    编译main.c:

    gcc main.c test.h -L. -ltest -o test

    -L表示指定静态库的目录,如果不指定目录,编译器会去系统目录查找,如果系统目录没有将报错。

    -l表示链接对应的静态库,在linux下静态库的名称统一为libxxx.a,在链接时只需要使用-lxxx即可。
    执行程序:

    ./test

    输出结果:

    custom strong func override!

    很明显,在test库中,我们定义了weak_func函数,且weak_func是一个弱符号,且在test_func中被调用,然后在main.c中,我们重新定义了test_func函数,且是个强符号,所以在链接时,链接器选择链接main.c中的test_func函数。

    如果我们将main.c中weak_func函数定义去掉,它的执行结果将是:

    defualt weak func is running!

    喜欢动手的朋友可以试试。

    弱引用的使用

    test.c:

    #include <stdio.h>
    static __attribute__((weakref("test"))) void weak_ref(void);
    void test_func(void)
    {
        if(weak_ref){
            weak_ref();
        }
        else{
            printf("weak ref function is null\n");
        }
    }

    test.h:

    void test_func(void);

    main.c:

    #include <stdio.h>
    #include <stdarg.h>
    #include "test.h"
    void test(void)
    {
        printf("running custom weak ref function!\n");
    }
    
    int main()
    {
        test_func();
        return 0;
    }

    将test.c编译成静态库;

    gcc -c test.c
    ar -rsc libtest.a test.o

    编译main.c:

    gcc main.c test.h -L. -ltest -o test
    
    
    ./test

    输出结果:

    running custom weak ref function!\n

    在test静态库中,我们仅仅声明了静态的weak_ref函数,且声明时使用了函数别名test,因为是静态声明,这个函数名的作用域被限定在本模块内,所以即使是我们在其他模块中定义了weak_ref函数,也无法影响到当前模块中的weak_ref函数。

    官方提供的方法是我们可以定义它的别名函数来代替,如上所示weak_ref的别名为test,所以在main.c中定义了test函数就相当于定义了weak_ref函数,所以在test_func的判断分支中,test_func中不为null,执行if(test_func)分支,如果在main.c中去除weak_ref的定义,函数的执行结果是这样的:

    weak ref function is null\n

    喜欢的动手的朋友的试试,同时试试带参数的函数,这样可以加深理解。
    至于为什么要使用别名来实现,将目标函数声明为静态,而不是直接使用当前名称实现,博主尚未找到答案,如果有路过的大神希望指点一二。

    好了,关于C语言中强弱引用和强弱符号的讨论就到此为止啦,如果朋友们对于这个有什么疑问或者发现有文章中有什么错误,欢迎留言

    原创博客,转载请注明出处!

    祝各位早日实现项目丛中过,bug不沾身.

    转载于:https://www.cnblogs.com/downey-blog/p/10470674.html

    展开全文
  • 符号与符号 当多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候会出现符号重复定义的错误。对于C/C++语言来说,编译器默认函数和初始化了的全局变量为符号,未初始化的全局变量为...
  • 主要介绍了C语言中的符号、符号、引用和引用的定义及相关内容,非常的简单易懂,有需要的朋友可以参考下
  • 符号与符号(引用与引用)

    千次阅读 2018-10-06 17:19:16
    符号与符号  我们经常在编程中碰到一种情况叫符号重复定义。多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。这种符号的定义可以被称为 符号(Strong ...
  • 引用 和 定义 在Link阶段将会体现出不同。
  • 结合`u-boot`和`kernel`来说明GCC中的符号和符号以及引用和引用
  • 符号与符号

    2018-08-14 16:26:09
    符号与符号 在C语言中,函数和初始化的全局变量(包括显示初始化为0)是符号,未初始化的全局变量是符号。 对于它们,下列三条规则使用: ① 同名的符号只能有一个,否则编译器报"重复定义"...
  • 引用和引用

    2018-07-12 18:58:50
    引用和引用
  • 符号和符号

    2019-03-27 17:07:12
    只有全局函数或变量才有强弱之分 符号: 函数和已经初始化的全局变量 符号: ...2)如果一个符号和多个符号同名,那么选择符号 3)当有多个符号时,编译器会选择占用空间最大的那个 ...
  • 动态、静态是指变量的绑定...而类型是说变量的类型在运算上下文中是否可以自动转换,对于1 + "1000"这样一条语言 python会报错,因为它是类型语言,而perl便能进行自动类型转换,所以它是类...
  • 一个分类器的分类准确率在60%-80%,即:比随机... 反之,如果分类精度90%以上,则是分类器。 西瓜书上说: 学习器常指泛化性能略优于随即猜测的学习器(例如在二分类问题上精度略高于50%的分类器) ...
  • 缓存和缓存

    2019-02-22 12:27:39
    缓存和缓存 www.cnblogs.com/iceflorence…
  • 类型和类型

    2015-08-27 10:11:55
     /类型是指类型检查的严格程度的。语言有无类型,类型和强类型三种。无类型的不检查,甚至不区分指令和数据。类型的检查很,仅能严格的区分指令和数据。类型的则严格的在编译期进行检查。 类型定义...
  • 首先我表示很悲剧,在看《程序员的自我修养--链接、装载与库》之前我竟不知道C有符号、符号、引用和引用。在看到3.5.5节符号和强符号时,我感觉有些困惑,所以写下此篇,希望能和同样感觉的朋友交流也希望...
  • 符号和符号  在编程中碰到一种情况叫符号重复定义。多个目标文件中含有相同名字的全局变量的定义,那么这些目标文件链接的时候就会出现符号重复定义的错误。比如在目标文件 A 和目标文件 B 都定义了一个...
  • 符号 符号

    千次阅读 2013-04-11 19:36:31
    为什么要存在符号,符号,什么是引用、引用,它们的作用是什么?最后介绍链接器的COMMON块机制(Common Block)。 一、符号----链接的接口: 在链接过程这种,目标文件之间相互拼合实际上是目标文件之间对...
  • 类型与类型

    2017-11-07 15:04:00
    什么是类型,什么是类型,哪种更好些?为什么?类型是在编译的时候就确定类型的数据,在执行时类型不能更改类型是在执行的时候才会确定类型没有好不好,二者各有好处类型安全,因为它事先已经确定好了,...
  • 编程语言的

    2020-10-24 01:34:19
    类型语言与类型语言 编程语言居然有强弱之分,一起理解一下。 强弱类型的界定 (1)类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,720
精华内容 8,288
关键字:

弱强