memchr()内存查找字符函数:主要用于从内存中查找自己需要的字符位置。

(1)函数原型:

void *memchr(const void *_Buf ,int _Val,size_t _MaxCount)

(2)头文件

#include <string.h>

(3)功能:

在内存中,从第一个变量const void *_Buf给出的内存地址开始,以字节为单位,按照第二个变量int _Val所对应的字节值查询。

如果有则返回所对应的字节内存地址,如果没有则返回NULL或者奔溃。

第三个变量size_t _MaxCount表示查询的最大范围。

(4)基础实例代码:

    char a[]="hello zobol!";
char c='z';
char* ret; ret = (char*)memchr(a,c,strlen(a));
printf("%c",*ret);//*的意思是取出地址所对应内存位置的值
printf("%s",ret);//%s是用于字符串输出,输入一个内存的地址,会自动输出从开头到\0的值

(5)输出情况:

(6)问题1:int _Val的取值范围0~255,可以超过吗?:

  回答:不可以,int_Val的值对应是一字节二进制0000 0000~11111111的无符号数值,不可以超过否则会发生错误,程序直接奔溃,不是返回空指针。一般情况下用char表示,自动强制转换为int比较好。

  实例代码:

    char b[]="公众号:zobol的魔法藏书室";
int vali = 111;//'o'的对应ascii码
int vali2 = 300; //超限值
char* ret2 = (char*)memchr(b,vali,15);
char* ret3 = (char*)memchr(b,vali2,7);
printf("%c\n",*ret2);//*的意思是取出地址所对应内存位置的值
printf("%s\n",ret2);//%s是用于字符串输出,输入一个内存的地址,会自动输出从开头到\0的值
printf("%c\n",*ret3);//*的意思是取出地址所对应内存位置的值
printf("%s\n",ret3);

  运行情况:

 (注意返回值,程序是直接奔溃,不是正常结束)

(7)问题2:用于字符串查找,不知道字符串长度怎么办?

  回答:用strlen()函数获取,不能像python那样用-1表示结尾,C语言中字符串不是对象没有被封装。

(8)问题3:对于'\0'能查找吗?

  回答:可以,memchr针对的是一段内存,而不是一个字符串,只要二进制对于的值相等,就会返回。

(9)问题4:如果有两个重复的字符值,在查找范围内,返回哪一个?

  回答:返回离const void *_Buf开头内存地址最近的字符地址。

  示例代码:

    char c[]="公众号:zobol的魔法藏书室";
int valii = 111;//'o'的对应ascii码
char* ret4 = (char*)memchr(c,valii,strlen(c));
char* ret5 = (char*)memchr(ret4+1,valii,strlen(c));//内存地址加1,跳过第一个o
printf("%s\n",ret4);
printf("%s\n",ret5);

  运行情况:

(10)问题5:如果size_t _MaxCount范围超过字符串长度,或者在合法范围内没有找到符合的字符值,会返回什么?

  回答:并不是返回空指针,经过测试,是直接奔溃。(在不同编译器也许实现不一样)

 

如有收获,欢迎关注博主的个人公众号:zobol的魔法藏书室、

C语言学习之我见-memchr()内存查找字符函数的更多相关文章

  1. Oracle 截取、查找字符函数(持续更新)

    整理一些常用的截取.查找字符函数: 1.查找某一个字符串中某一个字符(串)出现的次数 SELECT LENGTH(REGEXP_REPLACE(REPLACE('anne<br>lily& ...

  2. C语言中常用的string.h的字符函数

    strcmp 字符串比较函数 原型: int strcmp(char *str1, char *str2); 例子: ) printf("buffer 1 is greater than b ...

  3. C语言学习之我见-malloc和free内存申请及释放函数

    malloc函数负责向计算机申请确定大小的内存空间. free函数负责释放malloc的申请空间. (1)函数原型 void free(void *_Memory); void * malloc(si ...

  4. C语言学习之我见-strlen()字符串长度函数

    strlen()函数,负责给出字符串的长度.注意是字符串的长度,不是字符数组的长度. (1)函数原型: size_t __cdecl strlen(const char *_Str); (2)头文件` ...

  5. C语言学习之我见-strcpy()字符串复制函数

    strcpy()函数,用于两个字符串值的复制. (1)函数原型 char * strcpy(char * _Dest,const char * _Source); (2)头文件 string.h (3 ...

  6. C语言学习之我见-strncat()可调整的字符串拼接函数

    strncat()函数,用于两个字符串的拼接. (1)函数原型 char * strncat(char * Dest,const char * Source,size_t _Count)` (2)头文 ...

  7. C语言学习之我见-strcat()字符拼接函数(有缺陷)

    strcat()函数,用于两个字符串的拼接. (1)函数原型: char * strcat(char *Dest,const char * Source); (2)头文件: #include < ...

  8. C语言学习之我见-strncpy()字符串复制函数(可控制范围)

    strncpy()函数,用于两个字符串值的复制. (1)函数原型 char *strncpy(char * _Dest,const char * _Source,size_t _Count); (2) ...

  9. C语言学习之我见-strncmp()字符串比较函数(控制范围)

    strncmp()函数,用于范围内,两个字符串的比较,n表示最大比较范围. (1)函数原型 int strncmp(const char *_Str1,const char *_Str2,size_t ...

随机推荐

  1. C++---继承和派生

    继承和派生 在C++中, 代码重用是通过继承机制来实现的 继承, 就是在一个已经存在的类的基础上, 再建议一个新类 从已经有的类派生出新的类, 派生类就继承了基类的特征, 包括成员和方法 继承可以完成 ...

  2. Spring配置数据源(连接池)

    1.数据源(连接池)的作用:为了提高程序的性能而出现的 2.数据源的原理: *事先实例化数据源,初始化部分连接资源 *使用连接资源时从数据源中获取 *使用完毕后将连接资源归还给数据源 使用c3p0的步 ...

  3. MySQL 集群历史版本信息

    MySQL 集群有两种命名方式,在Mysql5.1版本之前,MySQL 集群是以MySQL版本号命名:MySQL5.1(包括)之后开始以 mysql-mysql_server_version-ndb- ...

  4. clickhouse智能提示编辑器

    对于经常写sql的人来说智能提示是非常重要的,这个非常影响写sql的效率和心情. 这里说的智能提示不仅仅是关键字(select等)的智能提示,还得要做到表字段的智能提示. 例如: 下面是mysql的智 ...

  5. 《手写Mybatis》第4章:Mapper XML的解析和注册使用

    作者:小傅哥 系列:https://bugstack.cn/md/spring/develop-mybatis/2022-03-20-%E7%AC%AC1%E7%AB%A0%EF%BC%9A%E5%B ...

  6. Java 图像处理(一)

    曾几何时,Java图像处理已经被认为是太过鸡肋,就连Java的创始公司,在java图像处理方面也是浅尝辄止,可能相比较C++,Java在这方面的处理,确实差强人意. 不过Java类库中有一个叫JAI的 ...

  7. go interface{}使用

    先上代码 func In(haystack []interface{}, needle interface{}) (bool, error) { sVal := reflect.ValueOf(hay ...

  8. AcWing 【算法提高课】笔记02——搜索

    搜索进阶 22.4.14 (PS:还有 字串变换 A*两题 生日蛋糕 回转游戏 没做) 感觉暂时用不上 BFS 1. Flood Fill 在线性时间复杂度内,找到某个点所在的连通块 思路 统计连通块 ...

  9. 百度飞桨数据处理 API 数据格式 HWC CHW 和 PIL 图像处理之间的关系

    使用百度飞桨 API 例如:Resize Normalize,处理数据的时候. Resize:如果输入的图像是 PIL 读取的图像这个数据格式是 HWC ,Resize 就需要 HWC 格式的数据. ...

  10. 听说Integer有bug?1000不等于1000?

    bug? 前几天有位朋友找我,说:"老哥,老哥,我好像发现了Integer一个bug,你帮我看看什么情况?",说完给了我两个很简单的demo,上代码. 100 == 100 100 ...