zoukankan      html  css  js  c++  java
  • 用C语言写简单的交换机(三)

    #include <stdio.h>
    
    int main(void)
    {
        char name[32];    //字符数组
        char password[16];
    
        printf("请输入用户名: ");
        scanf("%s",&name);
        printf("请输入密码: ");
        scanf("%s",&password);
    /**
        fgets(name,sizeof(name),stdin);    //stdin标准输入,一般指键盘输入到缓冲区里的东西。
        printf("%s
    ",name);
    */
        return 0;
    
    }
    
    /**
        字符串
            --字符串结束符:在C语言中,为了便于存储字符串,要求在最后一个字符的后面存储一个0(一个字节)。这个0,称为“字符串结束符”,常用''表示
            --字符串的存储:在C语言中,字符串是以“字符数组”存储的
    */
    
    /**
        数组的定义
            --数组和其他变量一样,需要先定义,再使用
    
            实例:
            int a[4];    //表示定义了一个int类型的数组,数组的名字是a,数组a里面包含8个元素,每一个元素都必须是相同类型,也就是每一个数组的元素都是int型的数据
            int a[0] = 23;   //数组的赋值,这样写的意思是给数组a[0]赋值为23,也就是给下标为0的元素赋值为23,而不是给数组赋值为23,注意数组定义和赋值的区别
        
        数组的初始化
            --在定义数组的同时,设置数组内的元素值
    
            int a[8] = {2,1,5,8};   从下标0开始初始化,没有值的元素都将初始化为0,像这个数组,后面的四个值没有初始化的值,将会以0初始化
            int a[8] = {0};   这样写表示把所有的元素都初始化为0;总共8个元素,只有第一个值有值,这个值还是0,那么剩下的值将以0来初始化,本来就都是0
    
            --注意,这样写是错误的
                a = {1,2,3};    不能对数组名进行直接赋值   
                int a[3] = {1,2,3}   这样写就合适了  
    
    */
    
    /**
        sizeof()  返回一个变量或类型的大小,以字节为单位
    */
    
    /**
        计算一个数组有多少个元素
    
         sizeof(a)/sizeof(a[0]);   其实很简单,sizeof可以返回数组总共占多少个字节,而sizeof(a[0])则返回a数组的第0个元素的大小,数组里元素的类型都是相同的,大小也是相同的;不要说数组元素的值大小是不同的,元素的大小怎么会相同了,你能这么问,就说明你就数据类型和变量还不是很了解,数据类型不管你里面放的值得大小,它开辟出来的空间大小都是一定的,int类型的数据可以存放多大的数据,不管你存放的数据有没有这么大,它的内存已经开辟出来了,sizeof就是可以得到你开辟出来的内存的大小
    */
    
    /**
        数组的越界
            --数组的越界,指下标超出正常的范围
                例如 int a[3];   //a[-1] 和 a[10] 都是越界
            --数组越界的后果十分危险,可能导致数据破坏,或其他不可预计的后果
    */
    
    /**
        字符串的存储
           字符串,是通过“字符数组”(元素类型为char类型)来存储的;就是把字符串拆分成单个字符存储在char类型里面
    
           char name[8] = "star";   //这样写其实造成了一定程度上的浪费
    
           char name[] = 'star';    //这样写就不会造成浪费,系统会自己根据字符来判断字符数组的大小
           
           //前面这两种写法都等价于下面这种写法,都是以下面这种方法存储的
    
           char name[0] = "s";
           char name[1] = "t";
           char name[2] = "a";
           char name[3] = "r";
           char name[4] = "";   //""就是0;""是字符串结束符,若把字符串结束符写到第一位,则系统不会再去识别后面的内容,就相当于结束符,不管后面有没有值,只要出现,就会结束程序
    
    
    */
    
    /**
        字符串的输入
            scanf :从第一个非空白字符开始读取,直到遇到空白字符位置(不包含空白字符)
                缺点:不能读取空格,制表符,因为被当做“分隔符”处理了;当读取到空白符的时候,就会结束,比如如果你输入star shine,scanf识别到star之后的空格之后,就会结束运行,不会再去识别shine
                      可能导致越界
            gets:遇到回车符结束,想当于读一行,但是不包括行末的回车符
                特点:能够读取空格、制表符,但是不读取回车符。使用方便
                缺点:可能导致越界,很危险;这个缺点具体是指当字符数组的大小(元素的个数)是确定的时候比如a[6],如果你输入的的元素超过6个元素,就会导致越界;比如char a[2],然后你输入了a = "sadss";就会导致越界
            fgets:读取一行,直到遇到回车符。
                特点:安全!当你输入数据太多的时候,就只会读取(第二个参数-1)个字符
                      回车符也被读到字符串(除非输入数据太多)
                注意:fgets的第二个参数,常常使用sizeof
                */
    杂念太多,必然根基浅薄
  • 相关阅读:
    CORS跨域资源共享漏洞
    Linux Restricted Shell Bypass
    无情一点并没有错
    [机器学习]numpy broadcast shape 机制
    Chrome和IE的xss过滤器分析总结
    php使用substr中文乱码问题
    mac下自定义伪协议配置
    【转】前端黑魔法之远程控制地址栏
    Windows可信任路径代码执行漏洞
    小记一次mysql启动失败没有日志的处理
  • 原文地址:https://www.cnblogs.com/starshine-zhp/p/12371422.html
Copyright © 2011-2022 走看看