/*
字符串 : 有序的字符序列.本质 : 字符数组,不同的是,创建字符串时,系统默认在字符串末尾添加字符串结束标志"\0",因此字符串在内存中的实际长度比字符串的长度多一;
    定义格式 : char 字符串名称[字符串长度];    //注: 字符串长度指的是字符串在内存中的实际长度;
    初始化 : 1,定义的同时初始化,如 : char string[3] = "ab";    //此时字符串长度可省略;
             2,定义后,在初始化,如 : char string[3];string = "ab";    //此时,不在允许一次性赋值,只能够分别为每一个位置赋值
             3,通过数组定义字符串 : char string[3] = {'a', 'b', '\0'};    //当然,如果赋值时,元素的长度小于字符串的定义长度,此时,"\0"可不写,
                                                                            因为默认空白位置的值就是"0",而"0"就是"\0"的ASCII值;
    字符串的输入输出 :
        输出 : printf("string = %s",string);    //输出过程分析 :字符串的本质即为一个字符数组,因此作为实参时,实际上传递给函数的是字符串在内存中的地址,
                                                                 首先,判断该地址指向的字符是否为"\0",如果是,什么也不输出,跳出函数;如果不是,输出该字符,
                                                                  地址加1,继续上述判断,直至遇到"\0";
               puts(string)    //原样输出,自动换行;
        输入 : scanf("%s",&string)    // 注 : 接收字符串时,默认以空白字符结束,因此无法接收含有空白字符的字符串;
               gets(string)    //注 : 此函数可接受含有空白字符的字符串,但该函数并不安全;
        计算字符串长度 : include <string.h>
                         size_t length = strlen(string);    //原理 : 从传入的地址开始,逐个判断计数,直至"\0",利用指针可自己实现该函数;
        字符串的连接 : include <string.h>
                       strcat(dest, src)    //将src拼接至dest,由于是直接对dest进行操作,因此要求dest有足够的长度接收src;
                       strncat(dest, src, size_t)    //size_t参数接收拼接至dest的src中字符的个数,目的在于保证dest的安全,当src的长度大于dest能够接受的字符
                                                       串长度时,有可能会挤占dest中"\0"的位置,导致字符串无法正确结束,而错误访问其他内存空间;
        字符串拷贝 : strcpy(dest, src)
                     strncpy(dest, src, size_t)
        字符串比较 : strcmp(dest, src)    //返回0,则两个字符串相等;返回整数,字符串不等,且首次遇到的不等位置的字符的ASCII值大于另一个字符串对应位置的字符的
                                            ASCII值;如果小于0,字符串不等,且首次遇到的不等位置的字符的ASCII值小于另一个字符串对应位置的字符的ASCII值
        字符串数组 : 本质 : 二位数组;
*/