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. spring-bean依赖注入-03

    set注入:set注入地址 通过构造方法进行注入 1.创建UserDao接口以及UserDaoImpl实现类(接口代码省略) public class UserDaoImpl implements U ...

  2. mysql发展历程 各分支版本溯源

    首先为什么要了解mysql的历史,了解一个软件的前生后世有时候还是很有必要,特别是对于走在架构之路或者是想深入了解一个软件的时候,在不同版本中由于进行了很多的改进或者说加入了新的功能,也有可能是软件本 ...

  3. Blazor 在开发环境保存机密(User Secrets)

    前言 在应用程序开发的过程中,有的时候需要在代码中保存一些机密的信息,比如微信appkey, 连接字符串,加密密钥,字符串,或者是用户名密码等.通常的做法是保存到一个配置文件中,例如 appsetti ...

  4. 面试官:ZAB协议是什么?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 这天是越来越热了,但是还是有很多 ...

  5. React 日常记录

    以下是学习重点 原文地址 浏览器环境 JS解析和执行.绘制.事件处理.静态资源加载和处理 GUI渲染线程和Javascript线程 调度策略 先到先得(FCFS) 对短进程不利 对I/O密集不利 单处 ...

  6. git-config配置多用户环境以及 includeIf用法

    git-config配置多用户环境以及 includeIf用法 git-config配置多用户环境以及 includeIf用法 背景 介绍 配置 栗子 背景 开发人员经常遇到这样的问题,公司仓库和个人 ...

  7. 开源框架YiShaAdmin如何使用任务计划

    1.在Startup添加 new JobCenter().Start();(红色字体,下同) // This method gets called by the runtime. Use this m ...

  8. XCTF练习题---WEB---view_source

    XCTF练习题---WEB---view_source flag:cyberpeace{662b1cf989a0a7999a5589290ce5a88e} 解题步骤: 1.观察题目,打开场景 2.根据 ...

  9. ChCore Lab2 内存管理 实验笔记

    本文为上海交大 ipads 研究所陈海波老师等人所著的<现代操作系统:原理与实现>的课程实验(LAB)的学习笔记的第二篇.所有章节的笔记可在此处查看:chcore | 康宇PL's Blo ...

  10. 构建AR视频空间大数据平台(物联网及工业互联网、视频、AI场景识别)

    目       录 1.      应用背景... 2 2.      系统框架... 2 3.      AI场景识别算法和硬件... 3 4.      AR视频空间管理系统... 5 5.    ...