当前位置: 首页 > article >正文

C标准库<string.h>-mem开头的函数

void *memchr(const void *str, int c, size_t n)

函数功能

在参数str所指向的内存区域的前n个字节中搜索第一次出现字符c(转换为无符号字符类型)的位置。

参数解释

  1. str:指向要被搜索的内存区域的指针。
  2. c:要搜索的字符,以整数形式给出,但会被转换为无符号字符类型进行搜索。
  3. n:指定要搜索的字节数。

返回值

如果找到字符c,则返回指向字符c在内存区域中第一次出现位置的指针;如果在给定的内存区域中没有找到字符c,则返回一个空指针。

函数实现

函数用法

#include <stdio.h>
#include <string.h>
 
int main ()
{
   const char str[] = "http://www.runoob.com";
   const char ch = '.';
   char *ret;
 
   ret = (char*)memchr(str, ch, strlen(str));//原函数的返回值类型是“void *”,
//这里我们用强制类型转换将其变成一个“char *”,就可以输出“ch”及其之后的字符了
 
   printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);
 
   return(0);
}
|.| 之后的字符串是 - |.runoob.com|

二、

#include <stdio.h>
#include <string.h>

int main() {
    const char *str = "Hello,World!";
    int c = 'W';
    int n = strlen(str);

    // 使用 memchr 查找字符 'W'
    char *result = (char *) memchr(str, c, n);

    if (result) {
        // 计算找到的字符在字符串中的位置
        int position = result - str+1;
        printf("Character '%c' found at position: %d\n", c, position);
    } else {
        printf("Character '%c' not found.\n", c);
    }

    return 0;
}
Character 'W' found at position: 7
请按任意键继续. . .

 int memcmp(const void *str1, const void *str2, size_t n)) 

函数功能

用于比较两个内存块(str1,str2),前n个字节的内容

参数解释

  • str1 -- 指向内存块的指针。
  • str2 -- 指向内存块的指针。
  • n -- 要被比较的字节数。

返回值

  • 如果返回值 < 0,则表示 str1 小于 str2。
  • 如果返回值 > 0,则表示 str1 大于 str2。
  • 如果返回值 = 0,则表示 str1 等于 str2。

函数实现



函数用法

通过“函数实现”我们可以知道这个函数对比两个字符串,当遇到不同的时候就做出判断,如果返回值 < 0,则表示 str1 小于 str2。如果返回值 > 0,则表示 str1 大于 str2。如果返回值 = 0,则表示 str1 等于 str2。

#include <stdio.h>
#include <string.h>

int main() {
    const char *str1 = "Hyllo";
    const char *str2 = "Horld";
    int n = 5; // 比较前5个字符

    int result = memcmp(str1, str2, n);

    if (result == 0) {
        printf("The memory areas are equal.\n");
    } else if (result < 0) {
        printf("The first memory area is less than the second.\n");
    } else {
        printf("The first memory area is greater than the second.\n");
    }

    return 0;
}
The first memory area is greater than the second.
请按任意键继续. . .

void *memcpy(void *str1, const void *str2, size_t n)

函数功能

memcpy 函数用于从源内存地址复制指定数量的字节到目标内存地址。

参数解释

  • str1:指向目标内存区域的指针,数据将被复制到这里。
  • str2:指向源内存区域的指针,数据将从这里复制。
  • n:要复制的字节数。

返回值

返回指向目标内存区域 str1 的指针。

函数实现

函数用法

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, World!";
    char dest[20]; // 确保有足够的空间来存储复制的数据

    // 将 src 复制到 dest
    memcpy(dest, src, strlen(src) + 1); // 加1以包括空字符 '\0'

    printf("Source: %s\n", src);
    printf("Destination: %s\n", dest);

    return 0;
}
Source: Hello, World!
Destination: Hello, World!
请按任意键继续. . .

void *memmove(void *str1, const void *str2, size_t n)

函数功能

memmove 函数用于从源内存地址复制指定数量的字节到目标内存地址。与 memcpy 不同的是,memmove 可以处理源和目标内存区域重叠的情况。

参数解释

  • str1:指向目标内存区域的指针,数据将被复制到这里。
  • str2:指向源内存区域的指针,数据将从这里复制。
  • n:要复制的字节数。

返回值

返回指向目标内存区域 str1 的指针

函数实现

函数用法

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "abcdefghijklmn";
    // 将从 str + 2 开始的 5 个字节复制到 str + 7
    memmove(str + 7, str + 2, 5);
    printf("%s\n", str);
    return 0;
}
abcdefgcdefgmn
请按任意键继续. . .

void *memset(void *str, int c, size_t n)

函数功能

memset 函数用于将指定的值填充到内存区域的指定字节数中。这个函数通常用于初始化数组或清空内存区域。

参数解释

  • str -- 指向要填充的内存区域的指针。
  • c -- 要设置的值,通常是一个无符号字符。
  • n -- 要被设置为该值的字节数。

返回值

该值返回一个指向存储区 str 的指针。

函数实现

函数用法

#include <stdio.h>
#include <string.h>
 
int main ()
{
   char str[50];
 
   strcpy(str,"This is string.h library function");
   puts(str);
 
   memset(str,'$',7);
   puts(str);
   
   return(0);
}

This is string.h library function
$$$$$$$ string.h library function

http://www.kler.cn/a/319299.html

相关文章:

  • C++中的std::tuple和std::pair
  • Gartner发布安全平台创新洞察:安全平台需具备的11项常见服务
  • 阿里云centos7.9服务器磁盘挂载,切换服务路径
  • 准确率调整研究中心
  • WebAssembly在现代Web开发中的应用
  • 虚幻引擎 CEO 谈元宇宙:发展、策略与布局
  • Linux安装Redis
  • 使用vite+react+ts+Ant Design开发后台管理项目(三)
  • 5G技术对IT行业的影响及未来发展
  • SpringBoot整合ELK实现日志监控(保姆级教程)
  • fo-dicom,第一个基于.NET Standard 2.0 开发的DICOM开源库
  • 【ANTLR】常见的几种编程语言表达模式
  • 古代经典名方目录数据库-支持经典名方检索!
  • IMS注册流程中的基本路由寻址过程
  • 西部移动硬盘怎么恢复数据?4种详细且实用的方法
  • 腾讯邮箱上传附件卡、慢、无法上传问题处理
  • 详解机器学习经典模型(原理及应用)——逻辑回归
  • neo4j小白入门
  • 记录踩坑 uniapp 引入百度地图(微信小程序,H5,APP)
  • 研一上课计划2024/9/23有感
  • 高效编程的利器 Jupyter Notebook
  • Java Map类
  • 《AI办公类文档工具系列之三——ChatPDF》
  • 【java21】java21新特性之简单的Web服务器jwebserver
  • 主流卷积神经网络CNN总结
  • 网络安全知识:灾难恢复计划简介