当前位置:网站首页>C语言--字符串操作函数与内存操作函数
C语言--字符串操作函数与内存操作函数
2022-07-27 05:20:00 【秋名山车神ae】
字符串操作函数
strlen-求字符串长度函数
实现原理:遍历字符串 直至发现字符串末尾的'\0',。
模拟实现代码:
unsigned int mystrlen(const char* arr)
{
int count = 0;
assert(arr != NULL);
while (*arr)
{
arr++;
count++;
}
return count;
}strcpy-字符串复制函数
将一个字符串的内容复制至另一个字符串
实现原理:遍历源字符串的每一个字符,并复制给目标字符串,直至遍历至'\0'
模拟实现代码:
char* mystrcpy(char* dst, const char* sou)
{
char* tmp = dst;
assert(dst != NULL && sou != NULL);
while (*dst++ = *sou++) //当遍历至'\0'时不再进入循环
{
;
}
return tmp;
}strcmp-字符串比较函数
比较字符串中每个字符串的内容,当相同时,继续下个字符,若都相同 返回0。
若发现一个字符大于,返回大于0的整型,发现小于。返回小于0的整型
模拟实现代码
int mystrcmp(const char* arr1, const char* arr2)
{
assert(arr1 != NULL && arr2 != NULL);
while (*arr1 == *arr2)
{
if (*arr1 == '\0')
{
return 0;
}
arr1++;
arr2++;
}
return *arr1 - *arr2;
}strcat-将一个字符串插入另一个字符串的尾部
实现原理 ,先遍历目标字符串,直至将起始指针指向'\0'
从目标字符串的'\0'位置开始 ,插入源字符串的字符,直至遍历至源字符串的'\0'为止。
模拟实现代码:
char* mystrcat(char* arr1, const char* arr2)
{
char* tmp = arr1;
assert(arr1 != NULL && arr2 != NULL);
while (*arr1)
{
arr1++;
}
while (*arr1++=*arr2++)
{
;
}
return tmp;
}内存操作函数
memcpy-字节复制函数
将源地址的count个字节复制给目标地址。
实现原理 ,将两个地址强制类型转换为char*类型,这样使得在之后的解应用和自增时步长都为1个字节,然后从目标地址和原地址开始,地址开始以一个字节的步长开始自增,对目标地址和源地址进行解引用,每个字节都复制成源地址处的字节。
模拟实现代码:
char* mymemcpy(void* arr1, const void* arr2, size_t count)
{
char* ret = (char*)arr1;
while (count--)
{
*(char*)arr1 = *(char*)arr2;
arr1=(char*)arr1+1;
arr2=(char*)arr2+1;
}
return ret;
}memmove-字节移动函数
可以将两个有重叠的地址的字节内容进行复制。
实现原理 当目标空间的起始地址比源空间串起始地址小或两个部分未重叠时,应采用将从前到后的顺序进行复制,这样在复制过程中就不会覆盖未复制的部分。
当目标空间的起始地址比源空间的起始地址大时,应采用从后到前的顺序进行复制。
模拟实现代码;
char* mymemove(void* arr1, const void* arr2, size_t count)
{
char* ret = (char*)arr1;
if (arr1 <= arr2 || arr1>=(char*)arr2+count)
{
while (count--)
{
*(char*)arr1 = *(char*)arr2;
arr1 = (char*)arr1 + 1;
arr2 = (char*)arr2 + 1;
}
}
else
{
while (count--)
{
*((char*)arr1 + count) = *((char*)arr2 + count);
}
}
return ret;
}边栏推荐
- 物联网操作系统
- 【头歌】重生之我在py入门实训中(12):Matplotlib接口和常用图形
- 李宏毅 2020 深度学习与人类语言处理 DLHLP-Conditional Generation by RNN and Attention-p22
- 使用-Wall清除代码隐患
- Digital image processing Chapter 5 - image restoration and reconstruction
- Day 3. Suicidal ideation and behavior in institutions of higher learning: A latent class analysis
- arcgis style样式表文件转换成geoserver sld文件
- 安装windows下的redis
- 13. Logistic regression
- 西瓜书学习第五章---神经网络
猜你喜欢

STM32-红外遥控

Numpy basic learning

发布 分辨率0.22m的建筑物分割数据库

Digital image processing Chapter 2 fundamentals of digital image

视觉横向课题bug1:FileNotFoundError: Could not find module ‘MvCameraControl.dll‘ (or one of it

制作视频特效必备工具:NUKE 13

pytorch的多GPU训练的两种方式
![[concurrent programming series 9] priorityblockingqueue, delayqueue principle analysis of blocking queue](/img/2b/1bfadbffad33f8560357fab74e8308.png)
[concurrent programming series 9] priorityblockingqueue, delayqueue principle analysis of blocking queue

3. Classification problems - initial experience of handwritten digit recognition

leetcode系列(一):买卖股票
随机推荐
2022.6.10 stm32mp157 serial port clock learning
Speech and Language Processing (3rd ed. draft) Chapter 2 ——正则表达式,文本归一化,编辑距离 阅读笔记
Can it replace PS's drawing software?
制作视频后期特效需要什么工具?
2022.6.10 STM32MP157串口时钟的学习
SoK: The Faults in our ASRs: An Overview of Attacks against Automatic Speech Recognition (题目过长)阅读笔记
pytorch模型
IOT operating system
Greedy high performance neural network and AI chip application research and training
数字图像处理——第三章 灰度变换与空间滤波
VSCode解决运行ipynb文件使用卡顿问题
Numpy basic learning
Matlab 画图(超详细)
pytorch中交叉熵损失函数的细节
geonode geoserver win10 安装教程(亲测)
7. Merger and division
8. Mathematical operation and attribute statistics
[MVC Architecture] MVC model
Gbase 8C - SQL reference 6 SQL syntax (3)
【头歌】重生之我在py入门实训中(2):公式编程