ANSI C标准要求在使用字符串处理函数时,要包含头文件string.h ;在使用字符函数时要包含头文件ctype.h
字符数组的长度
- 字符数组中'\0'代表ASCII码为0的字符,ASCII码表中0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不做。
- 字符数组以检测'\0'来判断字符串是否结束,而不是根据数组的长度来决定字符串长度。
char arr1[ ]={"I am happy"};
char arr2[ ]={'I',' ','a','m',' ','h','a','p','p','y'};
其中:arr1[ ]等价于{'I',' ','a','m',' ','h','a','p','p','y','\0'}
arr1与arr2不等价
arr1 长度为11,arr2长度为10
字符数组的输入输出
(都用%s格式字符)
- 输出时遇结束符'\0'停止输出,且输出的字符中不包括'\0'
- 输出项是字符数组名(如arr1),不能是数组元素名(如arr1[5])
- scanf函数输入项如果是字符数组名,就不要再加地址符&,
- C语言中数组名代表该数组第一个元素的地址(起始地址)
puts函数--输出字符串
一般形式:puts(字符数组)
功能:将一个字符串(以'\0'结束的字符数列)输出到终端
例:char arr1[ ]={"I am happy"};
puts(arr1);
输出为“I am happy”
- puts函数输出的字符串可以包含转义字符
如 char str[ ]={"China\nBeijing"};
puts(str);
输出:
China
Beijing
注:1、puts输出时结束符'\0'自动换为'\n',即输出完字符串后换行
2、puts函数只能输出一个字符串
gets函数--输入字符串
一般形式:gets(字符数组)
功能:从终端输入一个字符串到字符数组,并得到一个函数值,函数值是字符数组的起始地址
例:gets(str); //str是已定义的字符数组
从键盘输入:Computer
则送给字符数组str,返回的函数值是字符数组的起始地址
注:1、送给字符数组的是9个字符,而不是8个
2、gets函数只能输入一个字符串
strcat函数--字符串连接函数
一般形式:strcat(字符数组1,字符数组2)
功能:将字符串2接到字符串1后面,结果放在字符数组1中,函数调用后得到一个函数值---字符数组1的地址
注:1、字符数组1要足够大
2、连接时字符串1后面的'\0'取消,只在新串最后保留'\0'
strcpy和strncpy函数--字符串复制函数
一般形式:strcpy(字符数组1,字符数组2)
功能:将字符串2中复制到字符数组1中去
注:1、字符数组1要足够大,不应小于字符串2的长度
2、字符数组1必须写成数组名形式(如str1),字符串2可以是数组名也可以是一个字符串常
量
3、复制时字符串2中的'\0'也一起复制
4、不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组,因为字符数组名是一
个地址常量,不可更改
可以用strncpy函数将字符串2中前n个字符复制到字符数组1中
如strncpy(str1,str2,2)
功能:将str2最前面两个字符复制到str1中,取代str1原本最前面两个字符
strlen函数--测字符串长度
一般形式:strlen(字符数组)
功能:函数的值为字符串的实际长度(不包括'\0'在内)
如 char str[10]="China";
printf("%d",strlen(str));
输出结果为5,不是10,也不是6