百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

C语言中的strcpy,strncpy,memcpy,memmove,memset函数strcmp

liebian365 2024-11-16 23:09 21 浏览 0 评论


char *strcpy(char *strDest,const char *strSrc)

{

assert( (strDest != NULL) && (strSrc != NULL) );

char *address = strDest;

while(( *strDest++ = *strSrc++) != '\0');

return address;

}

//把src所指向的由NULL结束的字符串复制到dest所指的数组中

//src和dest所指内存区域不可以有重叠,且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。

//如果src的结尾不是‘\0'的话,系统会在src的结尾处自动加一个'\0'

char array1[5]={'1','2','3','4','5'}; //没有以'\0'结尾

char array2[5]={'a','b','c'}; //没有以'\0'结尾

char *strncpy(char *dest, const char *src,size_t count)

{

assert((dest != NULL ) && (src != NULL));

char *temp=dest;

while(count-- && (*dest++ = *src++) !='\0');

return temp;

}


//把src所指由NULL结束的字符串的前n个字符串复制到dest所指的数组中

//如果src前n个字节不含NULL,则结果不会以‘\0’字符结束

//如果src的长度小于n个字节,则以NULL填充到dest直到复制完n个字节

//src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串

//返回指向dest的指针

//如果只想显示复制的部分,就需要自己重新实现该函数,并且要加上'\0'


void *memcpy(void *dest, const void *src, size_t count)

{

assert(dest != NULL && src != NULL);

char *tmp = dest;

const char*s = src;

while(counst--)

{

*tmp++ = *s++;

}

return dest;

}

//由src所指内存区域复制count个字节到dest所指内存区域

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

//和strcpy相比,memecpy 不是遇到'\0'就结束,而是一定会拷贝完n个字节

void *memmove(void *dst, const void *src, size_t count)

{

void *address = dst;

if (dst <= src || (char*)dst >= (char *)src + count)

{

while (count --)

{

*(char *)address = *(char *)src;

address = (char *)address + 1;

src = (char *)src + 1;

}

}

else

{

address = (char *)address + count - 1;

src = (char *)src + count - 1;

while (count --)

{

*(char *)address = *(char *)src;

address = (char *)address - 1;

src = (char *)src - 1;

}

}

return dst;

}

与memcpy类似,所不同的是,当对象重叠时,该函数仍能正确执行

void *memset(void *buffer,int c,int count)

{

char *buf =(char *)buffer;

assert(buffer != NULL);

while(count-- > 0)

*buf++ = (char)c;

return buffer;

}

功能:将已开辟内存空间s的首n个字节的值设为值c。将s中的前n个字符替换为C,并返回s。

memset常用于内存空间的初始化。用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为memset(a,'\0',sizeof(a));


strcmp() 和 strncmp() 都是比较字符串的函数,比较字符串是否完全相同,区别在于能否比较指定长度字符串

两个字符串自左向右组个字符相比较(按ASCII值大小相比较),直到出现不同的字符或遇到'\0'为止。

#include <string.h>

int strcmp(const char *s1, const char *s2);

int strncmp(const char *s1, const char *s2, size_t n);


int strcmp(const char *str1,const char *str2)

{

/*不可用while(*str1++==*str2++)来比较,当不相等时仍会执行一次++,

return返回的比较值实际上是下一个字符。应将++放到循环体中进行。*/

while(*str1 == *str2)

{

if(*str1 == '\0')

return0;


str1++;

str2++;

}

return (*str1 - *str2);

}

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。加微信领取资料

相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符&quot;

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: