C语言学习之我见-memchr()内存查找字符函数
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()内存查找字符函数的更多相关文章
- Oracle 截取、查找字符函数(持续更新)
整理一些常用的截取.查找字符函数: 1.查找某一个字符串中某一个字符(串)出现的次数 SELECT LENGTH(REGEXP_REPLACE(REPLACE('anne<br>lily& ...
- C语言中常用的string.h的字符函数
strcmp 字符串比较函数 原型: int strcmp(char *str1, char *str2); 例子: ) printf("buffer 1 is greater than b ...
- C语言学习之我见-malloc和free内存申请及释放函数
malloc函数负责向计算机申请确定大小的内存空间. free函数负责释放malloc的申请空间. (1)函数原型 void free(void *_Memory); void * malloc(si ...
- C语言学习之我见-strlen()字符串长度函数
strlen()函数,负责给出字符串的长度.注意是字符串的长度,不是字符数组的长度. (1)函数原型: size_t __cdecl strlen(const char *_Str); (2)头文件` ...
- C语言学习之我见-strcpy()字符串复制函数
strcpy()函数,用于两个字符串值的复制. (1)函数原型 char * strcpy(char * _Dest,const char * _Source); (2)头文件 string.h (3 ...
- C语言学习之我见-strncat()可调整的字符串拼接函数
strncat()函数,用于两个字符串的拼接. (1)函数原型 char * strncat(char * Dest,const char * Source,size_t _Count)` (2)头文 ...
- C语言学习之我见-strcat()字符拼接函数(有缺陷)
strcat()函数,用于两个字符串的拼接. (1)函数原型: char * strcat(char *Dest,const char * Source); (2)头文件: #include < ...
- C语言学习之我见-strncpy()字符串复制函数(可控制范围)
strncpy()函数,用于两个字符串值的复制. (1)函数原型 char *strncpy(char * _Dest,const char * _Source,size_t _Count); (2) ...
- C语言学习之我见-strncmp()字符串比较函数(控制范围)
strncmp()函数,用于范围内,两个字符串的比较,n表示最大比较范围. (1)函数原型 int strncmp(const char *_Str1,const char *_Str2,size_t ...
随机推荐
- Postman大势已去
作为一名前端,日常开发过程中除了写业务代码,前后端联调更是重要的一环.但这一环却往往是整个开发中最繁琐也最累人的一环.任谁都想早点下班,然而提升联调效率并不是个纯技术相关的问题,而是需要有良好工作流程 ...
- 坐实大数据资源调度框架之王,Yarn为何这么牛
摘要:Yarn的出现伴随着Hadoop的发展,使Hadoop从一个单一的大数据计算引擎,成为大数据的代名词. 本文分享自华为云社区<Yarn为何能坐实资源调度框架之王?>,作者: Java ...
- ArcGIS使用技巧(一)——数据存储
新手,若有错误还请指正! 日常接触ArcGIS较多,发现好多人虽然也在用ArcGIS,但一些基础的小技巧并不知道,写下来希望对大家有所帮助. ArcGIS默认的存储数据库是在C盘(图1),不修改存储数 ...
- PostgreSQL 数据库备份脚本
PostgreSQL 数据库备份脚本 #!/bin/bash # PG家目录(/opt/postgresql/pg96/) PG_HOME=${PGHOME} # pg数据库连接信息 PG_HOST= ...
- mmdetection 绘制PR曲线
参考:https://github.com/xuhuasheng/mmdetection_plot_pr_curve 适用于COCO数据集 import os import mmcv import n ...
- 真实本人亲测Elasticsearch未授权访问漏洞——利用及修复【踩坑指南到脱坑!】
如要转载请注明出处谢谢: https://www.cnblogs.com/vitalemontea/p/16105490.html 1.前言 某天"发现"了个漏洞,咳咳,原本以为这 ...
- python+pytest接口自动化(15)-日志管理模块loguru简介
python自带日志管理模块logging,使用时可进行模块化配置,详细可参考博文Python日志采集(详细). 但logging配置起来比较繁琐,且在多进行多线程等场景下使用时,如果不经过特殊处理, ...
- MySQL(3) - 数据库表的相关操作
1.数据库表的创建 逻辑库 1)创建逻辑库:CREATE DATABASE 逻辑库名称; 2)显示逻辑库:SHOW DATABASES; 3)删除逻辑库:DROP DATABASE 逻辑库名称; 数据 ...
- visio 画泳道图
参考
- @ConfigurationProperties(prefix = "server-options") 抛出 SpringBoot Configuration Annotation Processor not configured 错误
说明 spring-boot-configuration-processor 包的作用是自动生成 META-INF/spring-configuration-metadata.json 文件,而这个 ...