c语言求字符串复制函数,快速上手系列-C语言之字符串处理函数(一)

C语言中常用的字符串操作函数,有比如计算字符串长度、字符串拷贝,字符串比较等这样的整体操作函数,有字符串查询函数,也有字符串转换函数等等,这里先介绍字符串整体操作函数。

630a258d88112febaf2b70663547768d.png

字符串整体操作函数

实际编程中,经常遇到对字符串整体的控制等操作,比如长度测量函数strlen(),字符串拷贝函数strcpy()/strncpy(),字符串比较函数 strcmp()/strncmp(),字符串连接函数strcat()/strncat()等,这些函数是非常有用的。

1、strlen

原型:int strlen ( const char *str )功能:返回字符串的实际长度,不含 '\0'。

a0e2d4ec662ac1cb2786cd9803958265.png

strlen之所以不包含'\0',是因为它在计数的途中遇到'\0'结束。

3c078b164ece22dab6c7366e87e29116.png

注意:sizeof与strlen不同,之前说过,sizeof不是函数,我们定义一个变量,使用sizeof可以计算所定义变量占用的内存大小,而且遇到'\0'不会结束;strlen是测字符串的实际长度。如 char buf[100] = "abc"; 则sizeof(buf)为100,而strlen(buf)为3。

2、strcpy / strncpy

1、strcpy

原型:char *strcpy( char *dest, const char *src )功能:把src所指向的以 '\0'结尾的字符串复制到dest所指向的数组中(strncpy,代表只拷贝前n个)返回值:返回参数dest字符串起始地址

d01f3fbf067d846fa96ce09bf6253842.png

需要注意的是,strcpy()遇到'\0'会结束并包含'\0'

41f1ae45926d98a6ec8e22a06174b1d8.png

2、strncpy

原型:char *strncpy(char *dest, const char *src, size_t n)功能:将参数src字符串拷贝前n个字符至参数dest所指的地址返回值:返回参数dest字符串起始地址

1302cbe6363ab49e9a6a323a0efd91f5.png

注意:strncpy()遇到'\0'结束,并且在个数n不足的情况下会用'\0'补齐。如上面例子,将数组src中的字符串拷贝4个字节到数组dest中,此时打印dest结果为“h”,那是不是说明strncpy遇到'\0'结束呢?这里还不足以说明,可能是strncpy的问题也可能是printf的问题。再看第二次输出,我们将dest中的元素分别打印出来:"h 56789",中间空有3个空字符(即'\0'),很明显,我们拷贝了4字节,但是'\0'后面的'e'和'l'并没有拷贝过去,并且后面三字节是用空字符来补全的,由此说明strncpy遇到'\0'结束,并且在个数n不足的情况下会用'\0'补齐。

strcmp/strncmp

原型: int strcmp( char *str1, char *str2 )功能:比较str1和str2的大小;返回值:相等返回0,str1大于str2返回1,str1小于str2返回-1;

61e3fcf66f0d96d9f9508259f8e9c7a0.png

对照ASICC码表可知,'A'为65,'a'为97,由于s1与s2相同,比较结果为0,s3大于s1,比较结果为1,s1小于s3,故比较结果为-1.

strcat/strncat

原型:char *strcat(char *dest, const char *src)功能:将参数src字符串拷贝到参数dest所指的字符串尾返回值:返回参数dest的字符串起始地址

aa56eedca557818ada5568e7f21fa94f.png

注意:第一个参数dest要有足够的空间来容纳要拷贝的字符串,如上面例子,s1不能写成char s1[] = "AAA";,如果这样写,s1只有4字节('A','A','A','\0'),如果将s2追加到s1末尾,由于s1空间不足会导致错误发生。

3037e058110ce50935991aa8140bcf63.png

好了,就这些吧,后续有时间来点符串查询函数和字符串转换函数。

举报/反馈

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值