1、strlen函数
用于计算字符串长度(除了末尾的'\0'
)。
函数格式:size_t strlen ( const char * str )
。
字符串以'\0'
作为结束标志,strlen函数返回的是在字符串中'\0'
前面出现的字符个数(不包含'\0'
)。
注意:
1、参数指向的字符串必须要以'\0'
结束。
2、注意函数的返回值为sizt_t,是无符号整型。
3、strlen的使用需要包含头文件<String.h>
。
2、strcpy函数
用于字符串拷贝。
函数格式:char* strcpy(char * destination,const char * source )
。
source
是源字符串的首字符地址,destination
是目标空间的首地址,返回值是返回的destination
,也就是目标空间的首地址。
实际意义是:获得一份从source
这个地址开始的字符串拷贝(也就是说在拷贝完遇到的第一个'\0'
,也就是源字符串末尾的终止字符'\0'
后就会停止),并将这份拷贝从destination
这个地址开始往后覆盖,整个过程不会改变源字符串。
注意:
1、源字符串必须以'\0'
结束。
2、会将源字符串中的'\0'
拷贝到目标空间。
3、目标空间必须足够大,以确保能存放源字符串。
4、目标空间必须可修改,所以说作为参数destination
的只能是字符数组,以及指向栈区的字符指针,而不能是指向字符串字面量的字符指针,这种指针指向的是静态区,静态区里的数据不可修改。
#include <stdio.h>
#include <string.h>
int main()
{
char a[] = "hello";
char b[20] = {0};
char* pb = b;
strcpy(pb,a);
printf("%s\n",b);\\正常打印
return 0;
}
3、strcat函数
用于连接两个字符串。
函数格式:char *strcat(char *destination,const char*source)
。
destination
是指向目标字符串首字符的指针,source
是指向源字符串首字符的指针,返回值返回的是destination
。
实际意义就是:获得一份从source
这个地址开始的字符串拷贝(也就是说在拷贝完遇到的第一个'\0'
,也就是源字符串末尾的终止字符'\0'
后就会停止),并将这份拷贝从以destination
为首地址的字符串的首个终止字符'\0'
的位置开始往后覆盖,也就是说会用源字符串拷贝的首字符覆盖掉目标字符串末尾的'\0'
。
注意:
1、源字符串必须以'\0'
结束。
2、目标字符串中必须有'\0'
,否则没办法知道追加从哪里开始。
3、目标空间必须有足够的大,能容纳下源字符串的内容。
4、目标空间必须可修改。
5、切忌一种情况,就是字符数组拿自己给自己追加,这种操作的最终结果是一直追加下去,没有尽头,即程序进入死循环;原因就是自己的原件的终止字符'\0
’已经被覆盖,函数找不到结尾条件,就会永远运行下去。
3、strcmp函数
字符串比较函数。
函数格式:int strcmp (const char * str1, const char * str2)
。
str1和str2是相互比较的字符串首地址。返回值是整型,两个若str1
大于str2
,则返回正整数;若str1
小于str2
,则返回负整数;若str1
等于str2
,则返回0。
实际意义:从字符串的首地址开始,逐个比较单个字符ASCII码值,直到对应位置上出现相异的字符为止,哪个字符串的对应位置上率先出现ASCII码值更大的字符,则对应的字符串更大。
注意:
1、两个字符串是无法直接比较大小的,因为直接比较的话比较的是首字符的地址大小,如果要比较字符串的内容,则必须使用strcmp函数。
2、字符串末尾的终止字符'\0'
的ASCII码值为0。
4、strcpy、strcat、strcmp与strncpy、strncat、strncmp
strcpy、strcat、strcmp这三个函数都是长度不受限制的字符串函数,也就是被这三个函数操作的字符串的字符个数都是不受限制的。
strncpy、strncat、strncmp这三个函数都是长度受限制的字符串函数,也就是被这三个函数操作的字符串的字符个数是受限制的。
5、strncpy
限定字符个数的字符串拷贝函数。
函数格式:char * strncpy ( char * destination, const char * source, size_t num )
。
source
是源字符串的首字符地址,destination
是目标空间的首地址,num
是需要从源字符串中拷贝的字符个数,返回值是返回的destination
,也就是目标空间的首地址。
实际意义是:获得一份从source
这个地址开始的字符串前n个字符的字符流拷贝(包括终止字符'\0'
),并将这份拷贝从destination
这个地址开始往后覆盖,整个过程不会改变源字符串。
注意:
在strcpy的注意事项上追加:
1、如若需要拷贝的限制数量n小于源字符串的总字符个数,那么在拷贝完最后一个字符后,并不会在这个字符流末尾补'\0'
,而是直接使用已拷贝的字符流。
2、如若需要拷贝的限制数量n大于源字符串的总字符个数,那么在拷贝完遇到的第一个'\0'
(也就是源字符串末尾的终止字符'\0'
)后会自动往字符流末尾持续补'\0'
,直到符合数量n。
3、如若需要拷贝的限制数量n等于源字符串的总字符个数,则函数等同于strcpy函数。
6、strncat
限定字符个数的字符串追加函数
函数格式:char * strncat ( char * destination, const char * source, size_t num )
。
destination
是指向目标字符串首字符的指针,source
是指向源字符串首字符的指针,num是指从源字符串拷贝过来用于追加的字符个数,返回值返回的是destination
。
实际意义就是:获得一份从source
这个地址开始的字符串前n个字符的字符流拷贝(包括终止字符'\0'
),并将这份拷贝从以destination
为首地址的字符串的首个终止字符'\0'
的位置开始往后覆盖,也就是说会用源字符串拷贝的首字符覆盖掉目标字符串末尾的'\0'
。
注意:
在strcat的注意事项上追加:
1、如若需要拷贝的限制数量n小于源字符串的总字符个数,则会在拷贝完成后自动往字符流末尾补上一个终止字符'\0'
,使其成为一个字符串后再使用。(并不会像strncpy函数那样不补'\0'
)
2、如若需要拷贝的限制数量n大于源字符串的总字符个数,那么在拷贝完遇到的第一个'\0'
(也就是源字符串末尾的终止字符'\0'
)后拷贝就直接结束了。(并不会像strncpy函数那样持续在末尾补'\0'
直到满足n)
3、如若需要拷贝的限制数量n等于源字符串的总字符个数,则函数等同于strcat函数。
7、strncmp
限定字符个数的字符串比较函数。
函数格式:int strncmp ( const char * str1, const char * str2, size_t num )
。
str1和str2是相互比较的字符串首地址,num
是比较的字符个数。返回值是整型,两个若str1
大于str2
,则返回正整数;若str1
小于str2
,则返回负整数;若str1
等于str2
,则返回0。
实际意义:从字符串的首地址开始,逐个比较前num
个字符的ASCII码值,直到对应位置上出现相异的字符为止,哪个字符串的对应位置上率先出现ASCII码值更大的字符,则对应的字符串更大。
8、strstr
在一个字符串中查找另一个字符串。
函数格式:const char * strstr ( const char * str1, const char * str2 )
。
函数返回字符串str2
在字符串str1
中第一次出现的位置的指针,只会查找匹配str2
的终止字符'\0'
前的字符流,并不会查找匹配'\0'
。
如果匹配不到,则返回NULL。
9、putchar函数
字符输出函数。
函数格式:int putchar(int ch)
。
ch
是字符的ASCII码值,返回值也是这个字符的ASCII码值。
函数作用:将单个字符放入标准输出缓冲区并输出到显示设备上,等价于:
printf("%c",ch);
注意:
1、要使用getchar函数,首先要包含头文件<stdio.h>
。
2、putchar函数一次只能输出一个字符。如若要输出一长串字符,则需要多次使用putchar函数。
3、putchar函数没有自动换行的功能,若需要换行,则需手动输出'\n'
,即:putchar('\n')
。
10、getchar函数
字符输入函数。
函数格式:int getchar()
。
无参数,返回的返回值是获取到的字符的ASCII码值。
函数作用:从标准输入缓冲区获取单个字符,并将这个字符存入变量。详见:scanf()与标准输入缓冲区
例如:
char ch = getchar();
char ch;
scanf("%c",&ch);
以上两项代码的意义相同。
注意:
1、使用getchar函数时,需要先包含头文件<stdio.h>
。
2、函数的返回值就是所获取的字符的ASCII码值。
11、puts函数
字符串输出函数。
函数格式:int puts(const char* str)
。
str
是指向需要输出的字符串首字符的字符指针,返回值是判断是否输出成功,若输出成功则返回非负整数,若输出失败则返回**-1**。
作用:从str
这个位置开始复制字符,直到遇见第一个终止字符'\0'
,终止字符'\0'
不会被复制,将得到的字符流拷贝的末尾先后加上'\n'
和'\0'
(注意,这个终止字符'\0'
并不是源字符串上的,而是在提取到字符流后编译器自动加上的),再放入标准输出缓冲区输出并输出到显示设备上。
总结起来就是输出字符串,并自带换行功能。
注意:
1、使用puts函数时,需要先包含头文件<stdio.h>
。
2、puts函数首先会输出指定的字符串,之后会自动进行换行操作,这与printf函数有所不同。
12、gets函数
字符串输入函数。
函数格式:char* gets (char* str)
。
str
是用于接收字符串的内存空间的首地址,返回的返回值就是这块内存空间的首地址。
作用:gets函数会持续匹配标准输入缓冲区中的一切字符形成字符流,在匹配到'\n'
(也就是输入时末尾的回车符)后结束匹配,'\n'
也会进入被匹配序列,可匹配序列中只有'\n'
前的字符流会被读取,而'\n'
会被清除出缓冲区,被读取的字符流末尾会被自动加上终止字符'\0'
形成字符串,再被存入以str
为首地址的内存空间中。
注意:
1、之前学的用格式化输入函数scanf来获取输入的字符串有一个缺点:不能获取到空白字符。故而引入gets函数。
2、gets函数能连续获取标准输入缓冲区中除'\n'
外一切的字符,包括空白字符。
3、总的来说就是:gets会读取标准输入缓冲区里的一切字符形成字符串,并且会清除最末尾的回车符。