C语言部分函数

本篇主要讲述字符串函数和内存函数。

1.字符串函数

(1).求字符串长度的函数

strlen:

函数原型:size_t strlen(const char *str)

函数的意思: 函数的返回值是size_t,即为无符号整型的数据类型,const用来保证字符串不会发生改变,而形参为字符型指针,用来接收数组首元素地址。

函数执行过程: 指针一直从低地址指向高地址,直到遇到\0,函数就结束,函数计算得到值就返回

注意: 函数所计算的长度不包括\0;字符串中若没有\0,函数就一直执行下去,可能指针会越界,直到遇到\0,那么函数就会返回一个随机值。

(2)长度不受限制的字符串函数:

①字符串拷贝函数strcpy:

函数原型:

char*strcpy(char*destination,const char source);

函数的意思: 把字符串或字符数组的数据,拷贝到字符数组中,而destination这个指针为拷贝的目的地的地址,source为背拷贝的的字符串的地址;const用来保证原字符串的内容不可变,返回值返回目标空间的地址。

函数执行过程: 通过赋值的方式进行,原字符串要以\0结束,同时也会被拷贝到目标空间中。

注意: 目标空间要足够大,以确保能放下源字符串;目标空间必须可变。

②字符串追加(连接)函数strcat:

函数原型:

char*strcat(char*destination,const*source)

函数的意思: 把两个字符串连接起来,const保证原字符串的内容不可变,返回值返回目标空间的地址。

执行过程: 执行中保证源字符串与目标字符串都要有\0,首先,先用一个变量来保存目标空间的地址,然后目标字符串的指针执行最后的\0,接着,再把原字符串的内容赋值给目标空间\0及以后的空间,最后带着目标字符串的首元素地址返回。

注意: 原字符串要以\0结束,即原字符串要把\0也赋值过去;目标空间要足够大,能容下原字符串的内容;目标空间可修改;相同字符串不可追加(连接),这样会改变\0,使字符串的内容没有\0,这样指针不会停止,导致指针越界,程序出错。

③字符串比较函数strcmp:

函数原型:int strcmp(const char*str1,const char*str2);

函数意思:const的意思和上面的一样;其中返回一个整形的数据。

执行过程: 字符串比较通过字符的ascii码来比较,通过指针指向一个个字符,比较相同时会跳过直至到\0。

注意: str1大于str2是,返回一个大于0的数字;str1小于str2时,返回一个小于0的数字,当相等时,则返回0。

(3)长度受限制的字符串函数:

字符串拷贝函数  strncpy:

char * strncpy ( char * destination, const char * source, size_t num );

字符串连接函数 strncat:

char * strncat ( char * destination, const char * source, size_t num );

字符串比较函数 strncmp:

int  strncmp ( const char * destination, const char * source, size_t num );

函数的意思: 函数的大致意思基本和上面的描述一致,但多了个size_t num,表示的是指限制函数功能实现的字符的个数,作用更加细化。

(4)字符串查找

①strstr

函数原型:

char*strstr(const char*str1,const char*str2);

函数意思:在str1中找与str2相同的字符串(内容)

模拟实现:

b634e9e110b34fec8b1451699d0e595d.png

 图例ab358ccece7f401ebed5aac917f9b69d.png

 

 

②strtok:

函数原型: char *strtok( char*str,char*sep);

函数意思: 把字符串中的所有分隔符去掉,得到被分隔符分开的几个字符串。str为目标字符串的地址,sep为放分隔符的数组的地址。

执行过程: strtok(str,sep);

                strtok(NULL,sep);

                strtok(NULL,spe);

首先先找到第1个分隔符,把分隔符变为\0,返回一个被分隔后,分隔符前面的这个字符串的首元素地址,并且函数将保存分隔符在字符串中的位置,当第2次调用的时候,函数的第1个参数为NULL时,函数将在同一个字符串中被保存的位置开始,接下来调用也是一样的,

注意: NULL相当于没用,因为该函数第一次调用地址已经保存了的,第二次调用传空指针就行了;在执行函数中,原来的字符串的内容会被改变,所以可以先拷贝下来。

以下为例子:

c186a892004445ae9dfe27f6a1259290.png

 

2.内存函数

(1)内存拷贝函数  memcpy

函数原型: void*memcpy(void*destination,const void*source,size_t num);

函数特点: 能拷贝不同的数据类型;遇到\0不会停;大意是吧把source所指向的num个字节的内容拷贝到destination去。

(2)内存拷贝函数 memmove

函数原型: void*memmove(void*destination,const void*source,size_t num);

函数特点:  与memcpy不同的是,memmove可以在同一个字符串中可处理重叠的情况。

(3)内存比较函数memcmp

函数原型:  int memcmp(const void*ptr1,const void*ptr2,size_t num)

函数特点: 比较从p1和p2指针开始的num个字节,就比较多少个字节其主要功能是比较两段内存区域的大小,也就是按字节比较两个内存区域中相应字节的值(内容)的大小;返回值与strcmp一样;可以比较不同类型的数据,与字符串的比较相似。

 

以上是部分函数内容,如有错误希望斧正。

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小凌不是林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值