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. 【Example】C++ STL 常用容器概述

    前排提醒: 由于 Microsoft Docs 全是机翻.所以本文表格是我人脑补翻+审校. 如果有纰漏.模糊及时评论反馈. 序列式容器 序列容器是指在逻辑上以线性排列方式存储给定类型元素的容器. 这些 ...

  2. C++篇:第四章_函数_知识点大全

    C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 五.函数 (一)函数使用规则 函数的定义不能嵌套但调用可以嵌套 在函数调用时,如 ...

  3. uniapp-h5之canvans上文本的展示

    ctx.font = 'bold 14px arial';ctx.fillStyle = '#e9e6e6';ctx.fillText('长按图片保存到相册', (this.pwidth -250/e ...

  4. python 面试题汇总

    1丶元组(list)和列表(tuple)的区别: 一:共同点: ①: 可以放置任意数据类型的有序集合,都是可以存放数字,字符串,对象等. ②:都支持 负索引,切片,随意嵌套等操作 二:不同点: ①: ...

  5. C. Sum of Cubes

    原题链接 https://codeforces.com/problemset/problem/1490/C 题目 题意 如果一个数 n = x3 + y3 (x, y可以相等, 且> 0) 输出 ...

  6. MySQL事务基本使用

    目录 1 事务概述 1.1 事务的支持情况 1.2 事务的特性 1.3 事务的状态 2 使用事务 2.1 显示事务 2.2 隐藏事务 3 事务隔离等级 3.1 数据并发问题 3.2 事务隔离等级介绍 ...

  7. 《你不知道的JS》上

  8. 如何利用 React Hooks 管理全局状态

    如何利用 React Hooks 管理全局状态 本文写于 2020 年 1 月 6 日 React 社区最火的全局状态管理库必定是 Redux,但是 Redux 本身就是为了大型管理数据而妥协设计的- ...

  9. 手写vue路由

    目录 一.简易demo 二.Vue-Router传参方式 三.进阶-路由导航 一.简易demo // routes注册 import Vue from "vue"; // impo ...

  10. 使用 gitbook 制作自己的 html 文档

    使用 gitbook 制作自己的 html 文档 步骤如下 npm install gitbook-cli -g // 全局安装 gitbook-cli <span style="te ...