/* 字符串 : 有序的字符序列.本质 : 字符数组,不同的是,创建字符串时,系统默认在字符串末尾添加字符串结束标志"\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) //注 : 此函数可接受含有空白字符的字符串,但该函数并不安全; 计算字符串长度 : includesize_t length = strlen(string); //原理 : 从传入的地址开始,逐个判断计数,直至"\0",利用指针可自己实现该函数; 字符串的连接 : include 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值 字符串数组 : 本质 : 二位数组; */