字符串函数(day11)
使用存储区的地址作为返回值可以让调用 函数使用被调用函数的存储区 这种时候被调用函数需要提供一个指针类型 的存储区记录作为返回值的地址数据 不可以把非静态局部变量的地址作为返回值 使用 C语言里的文字信息必须记录在一组连续 的字符类型存储区里 所有文字信息必须以'\0'字符做结尾,这个 字符的ASCII码就是数字0 符合以上两个特征的内容可以用来在C语言 程序里表示文字信息,它们叫做字符串 字符串里'\0'字符前面的部分是有效字符 所有字符串都可以采用字符类型指针表示 字符串字面值是表示字符串的一种方法, 用两个双引号中间包含的一组字符 表示字符串字面值(例如"dsg","^*&*@"等) 编译器在编译的时候会自动在字符串字面值的 末尾追加'\0'字符 编译器会把字符串字面值替换成第一个字符 所在存储区的地址 字符串字面值的内容在程序执行过程中不 可以改变 程序里内容一样的字符串字面值是同一个 多个并列的字符串字面值会被合并成一个 字符数组也可以用来记录字符串 只有包含'\0'字符的字符数组才可以当作 字符串使用 可以使用字符串字面值对字符数组进行初始化, 编译器会把字符串字面值里的'\0'字符 初始化到字符数组里 字符数组里字符串内容可以修改 在printf函数调用语句里使用%s做占位符可以 把字符串里所有有效字符显示在屏幕上 不可以使用操作符对字符串进行操作,应该 使用一组标准函数 为了使用这组标准函数需要包含string.h头文件 strlen 用来统计字符串里有效字符 的个数 和sizeof关键字完全不同 strcat 用来把两个字符串合并成 一个字符串 这个函数有可能修改不属于 数组的存储区,这会造成 严重错误 strncat 功能和strcat函数类似 这个函数可以避免strcat的 错误 strcmp 用来比较两个字符串的大小 根据字符ASCII码比较两个 字符串的大小 返回值是0表示两个字符串 一样大 返回值是1表示第一个参数 代表的字符串大 返回值是-1表示第二个参数 代表的字符串大 strncmp 用来比较两个字符串前n个 字符的大小 strcpy 用来把一个字符串的内容 复制到字符数组里 这个函数也可能修改不 属于数组的存储区, 这会造成严重错误 strncpy 功能和strcpy类似 只复制字符串里前n个字符, 这样可以避免问题 有可能不复制'\0'字符 memset 用来把字符数组里多个 连续的字符类型存储区 内容设置成同一个字符 strstr 从一个大字符串里查找 小字符串的位置 如果找不到就返回NULL 以下两个函数不需要包含string.h头文件 sprintf 把多个数字按照格式拼凑成 字符串并记录到字符数组里 sscanf 从字符串里获得多个数字并记录 到存储区里 以下两个函数需要包含stdlib.h头文件 这两个函数可以把字符串里的数字转换 成数字类型 atoi 这个函数可以把字符串里开头 的整数部分转换成整数类型 atof 这个函数可以把字符串里开头 的浮点数部分转换成双精度 浮点类型 在scanf函数调用语句里使用%s做占位符 可以把用户在键盘上输入的字符串记录 到字符数组里 这种方法有可能造成严重问题 fgets函数也可以把键盘上输入的字符串 记录到字符数组里 这个函数可以避免scanf函数的问题 这个函数需要三个参数 1.数组名称 2.数组里的存储区个数 3.用stdin表示键盘 如果用户输入的内容不能把数组充满就把 用户最后输入的回车当作'\n'字符也 放到字符数组里 如果用户输入的内容超过数组的范围就把 多余的部分留在输入缓冲区里等 下次读 在每次使用fgets函数从键盘得到字符串以后 都应该把可能存在的多余数据清理掉 清理多余数据的语句应该放在分支里,分支 要保证输入缓冲区里有多余数据的时候 才进行清理