408学习笔记-11-C-字符函数和字符串函数

本文详细介绍了C语言中strlen、strcpy、strcat、strcmp、strncpy、strncat、strncmp、strstr、putchar、getchar、puts和gets等字符串处理函数的用途、格式和注意事项,帮助理解这些函数在字符串操作中的关键作用。
摘要由CSDN通过智能技术生成

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会读取标准输入缓冲区里的一切字符形成字符串,并且会清除最末尾的回车符。

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值