memset()函数原型是extern void *memset(void *buffer, int c, int count)

头文件:#include <string.h>

buffer:为指针或是数组,

c:是赋给buffer的值,

count:是buffer的长度

一般用来进行初始化,memset可以方便的清空一个结构类型的变量或数组

不建议用来干别的。。。。。。因为。。。。。。。哈哈你试下就知道

memset是一个字节一个字节的设置,所以你想设置为1的时候,你就会得到0x01010101

void *memset(void *s, int c, rt_ubase_t count)
{
    char *xs = (char *)s;

while (count--)
        *xs++ = c;

return s;
}

更加详细的memset使用可以跳到这个大兄弟的博客:  https://blog.csdn.net/qq_27522735/article/details/53374765

原型:extern void *memcpy(void *dest, void *src, unsigned int count);

头文件:#include <string.h>

功能:由src所指内存区域复制count个字节到dest所指内存区域。

说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。

有一点要注意的事判断源地址和目的地址的大小,才决定到底是从高地址开始拷贝还是低地址开始拷贝

void *memcpy(void *dst, const void *src, int count)
{
    char *tmp = (char *)dst, *s = (char *)src;
    int len;

if (tmp <= s || tmp > (s + count))
    {
        while (count--)
            *tmp ++ = *s ++;
    }
    else
    {
        for (len = count; len > 0; len --)
            tmp[len - 1] = s[len - 1];
    }

return dst;
}

更加详细的memset使用可以跳到这个大兄弟的博客:https://blog.csdn.net/qq_35040828/article/details/71123521

原型:extern void *memmove(void *dest, const void *src, unsigned int count);

用法:#include <string.h>

功能:由src所指内存区域复制count个字节到dest所指内存区域。

说明:src和dest所指内存区域可以重叠。

void *memmove(void *dest, const void *src, rt_ubase_t n)
{
    char *tmp = (char *)dest, *s = (char *)src;

if (s < tmp && tmp < s + n)
    {
        tmp += n;
        s += n;

while (n--)
            *(--tmp) = *(--s);
    }
    else
    {
        while (n--)
            *tmp++ = *s++;
    }

return dest;
}

更加详细的memset使用可以跳到这个大兄弟的博客:https://blog.csdn.net/zgaoq/article/details/54586049

原型:extern int memcmp(void *buf1, void *buf2, unsigned int count);
用法:#include <string.h>  
功能:比较内存区域buf1和buf2的前count个字节。
说明:当buf1<buf2时,返回值<0当buf1=buf2时,返回值=0当buf1>buf2时,返回值>0
int memcmp(const void *cs, const void *ct, int count)
{
    const unsigned char *su1, *su2;
    int res = 0;

for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
        if ((res = *su1 - *su2) != 0)
            break;

return res;
}

原型:extern int strnlen(const char *s, int maxlen)
用法:#include <string.h>  
 功能:获取s的长度,指定maxlen。
 说明:返回长度。

int strnlen(const char *s, int maxlen)
{
    const char *sc;

for (sc = s; *sc != '\0' && sc - s < maxlen; ++sc) /* nothing */
        ;

return sc - s;
}

同上

int strlen(const char *s)
{
    const char *sc;

for (sc = s; *sc != '\0'; ++sc) /* nothing */
        ;

return sc - s;
}

原型:char *strstr(const char *s1, const char *s2)
用法:#include <string.h>  
 功能:功能就是找出在字符串str1中第一次出项字符串str2的位置(也就是说字符串sr1中要包含有字符串str2)
 说明:找到就返回该字符串位置的指针(也就是返回字符串str2在字符串str1中的地址的位置),找不到就返回空指针(就是 null)
char *strstr(const char *s1, const char *s2)
{
    int l1, l2;

l2 = strlen(s2);
    if (!l2)
        return (char *)s1;
    l1 = strlen(s1);
    while (l1 >= l2)
    {
        l1 --;
        if (!memcmp(s1, s2, l2))
            return (char *)s1;
        s1 ++;
    }

return NULL;
}

更加详细的memset使用可以跳到这个大兄弟的博客:https://blog.csdn.net/u013298384/article/details/24839727

原型:long atoi(const char *str)
用法:#include <string.h>  
功能:把字符串转换成数字
说明:不是rtt的内核源码
long atoi(const char *str)
{
    long res = 0;
    while(*str >= '0' && *str <= '9')
    {
        res = res*10 + *str -'\0';
        str++;
    } 
    return res;
}

更加详细的memset使用可以跳到这个大兄弟的博客:https://blog.csdn.net/gettogetto/article/details/49708419

上面的代码可以到这里下载:https://download.csdn.net/download/weixin_38452632/10677930

rtt的内核源码可以到这里下载:https://www.rt-thread.org/

嵌入式工程师常见C语言手写面试题,摘录于RTT内核源码相关推荐

  1. ElasticSearch——手写一个ElasticSearch分词器(附源码)

    1. 分词器插件 ElasticSearch提供了对文本内容进行分词的插件系统,对于不同的语言的文字分词器,规则一般是不一样的,而ElasticSearch提供的插件机制可以很好的集成各语种的分词器. ...

  2. 手写一个微前端框架(内含源码地址)

    来源:伊撒尔 https://zhuanlan.zhihu.com/p/169800579 halo,大家好,我是 132,前阵子冥思了一会儿微前端,然后周六日趁热打铁,马上写了一个微前端框架,名叫 ...

  3. 上班聊天,摸鱼神器,手写一款即时通讯工具(附源码!!!)

    文章目录 即时通讯工具 客户端 服务端 1.链接 2.登录 3.其他方法 3.1.读取客户端的消息 3.2.给客户端发送消息 3.3.日志记录 3.4.工具集合 3.5.ChatSocket 服务端部 ...

  4. 【手写数字识别】RBM神经网络手写数字识别【含GUI Matlab源码 1109期】

    ⛄一.手写数字识别技术简介 1 案例背景 手写体数字识别是图像识别学科下的一个分支,是图像处理和模式识别研究领域的重要应用之一,并且具有很强的通用性.由于手写体数字的随意性很大,如笔画粗细.字体大小. ...

  5. 【手写数字识别】基于matlab GUI BP神经网络单个或连续手写数字识别系统【含Matlab源码 2296期】

    ⛄一.手写数字识别技术简介 1 案例背景 手写体数字识别是图像识别学科下的一个分支,是图像处理和模式识别研究领域的重要应用之一,并且具有很强的通用性.由于手写体数字的随意性很大,如笔画粗细.字体大小. ...

  6. 练手写的python 淘宝购物车秒杀器 源码,成品链接,效果图

    #-*-coding:GBK -*- import os import winreg #操作注册表 import re import sys from tkinter import * from wi ...

  7. C语言手写栈、手写计算器

    C语言实现表达式求值 文章结构 C语言手写栈Struct Stack 后缀表达式求值 中缀表达式转后缀表达式 文章结构 本文尝试通过纯C语言写一个计算器,在Visual Studio和VScode运行 ...

  8. C语言手写二叉树(链式存储结构)

    C语言手写二叉树(链式存储结构) 二叉树结构 二叉树基本运算 代码 图例(main函数执行过程如下:) 阶段I 阶段II 阶段III 阶段IV 阶段V 先序遍历输出过程 二叉树结构 二叉树可以用顺序存 ...

  9. C语言手写自定义三维数组

    C语言手写三维数组 本文目的是通过C语言的结构体和动态数组,实现自定义类型的三维数组TripleArray及其基本运算 本文目的是通过C语言的结构体和动态数组,实现自定义类型的三维数组TripleAr ...

  10. 10个常见的前端手写功能

    10个常见的前端手写功能 1.防抖 2.节流 3.深拷贝 JSON方法 递归拷贝 4.手写Promise 5.异步控制并发数 6.继承 ES5 继承(寄生组合继承) ES6继承 7.数组排序 sort ...

最新文章

  1. 生物信息学 几个程序
  2. [原创]函数指针的应用
  3. matlab--曲线拟合
  4. mysql字段值后面有隐形字符_MySQL 隐形索引
  5. wxWidgets:编写非英语应用程序
  6. (五):C++分布式实时应用框架——微服务架构的演进
  7. vue key重复_Vue 前端面试题
  8. ExtJS 3.2 学习笔记(1)
  9. 联想7x04服务器装系统,联想硬盘保护EDU7X的安装方法.doc
  10. R语言:时间序列ARIMA模型使用
  11. 【活动报名】NEO 区块链公开课(1): NEO 区块链开发入门
  12. 浑水摸「YY」、「侠盗」苹果和辛巴的「麦乳精」|极客一周
  13. 滴滴悬赏百万寻凶,机智网友支付宝钓鱼转账杀害空姐明珠疑凶
  14. 极限中0除以常数_第七讲 极限存在准则和两个重要极限
  15. 使用AT89C51芯片实现生日快乐歌
  16. Unity SRP初识之URP
  17. HAUTOJ1062
  18. ps怎么把黑白照片变成彩色?ps把儿童黑白照变彩色教程
  19. Python win32com 操作word 插入回车符,换行符
  20. 小孔成像总结_备战中考|初中物理重要知识点总结,建议收藏!(下篇)

热门文章

  1. 有一个多项式:Pn(x)=a0x+a1x+….+anx(n=10),它们的系数存放在一个一维数组中,编写程序,输入系数和x的值,计算并输出Pn(x)的结果。
  2. 麦森数 OpenJ_Bailian - 2706
  3. APP启动时间检测——u-apm
  4. 如何测试app启动时间?
  5. zzuli:1000从今天开始入坑C语言
  6. python爬取京东商品评价信息
  7. SumatraPDF添加保存标注到TXT文本的功能
  8. 面试面经 | 2021大疆嵌入式软件工程师笔试题B卷
  9. 阿里云上的Docker容器镜像仓库
  10. 云账户合法吗_云支付合法吗?