内存函数简介
内存函数简介
一.memcpy函数:定义:在内存中用来copy一个数组内一定字节大小的数据到另一个数组内。头文件:#include<string.h>类型:代码语言:javascript代码运行次数:0运行复制void *memcpy(void*dest, ct void *src, size_t n)代码语言:javascript代码运行次数:0运行复制#define _CRT
内存函数简介
定义:在内存中用来copy一个数组内一定字节大小的数据到另一个数组内。
头文件:#include<string.h>
类型:
代码语言:javascript代码运行次数:0运行复制void *memcpy(void*dest, ct void *src, size_t n)
代码语言:javascript代码运行次数:0运行复制#define _CRT_SECURE_O_WARIGS
#include<stdio.h>
#include<string.h>
//void* my_memcpy(void* s1, void* s2, size_t n) {
// assert(s1 && s2);
// char* start = (char*)s1;
// while (n) {
// *(char*)s1 =*(char*)s2;
// ((char*)s1)++;
// ((char*)s2)++;
// n--;
// }
// return start;//这是我们模拟实现的memcpy;但是memcpy有个缺点不能copy重叠的内存区域
//
//
//}
//int main() {
// char str1[9] = "abcdefg";
// char str2[4] = "mnk";
// /*memcpy(str1, str2, 2);*/
// my_memcpy(str1, str2, 2);
// printf("%s", str1);
// return 0;
//}
接下来会打印:
我们copy有重叠的就需要用memmove函数:
代码语言:javascript代码运行次数:0运行复制void* my_memmove(void* s1, void* s2, size_t n) {
assert(s1 && s2);
char* ret = (char*)s1;
if (s1 < s2) {
while (n) {
*(char*)s1 = *(char*)s2;
((char*)s1)++;
((char*)s2)++;
n--;
}
}
else while (n) {
*((char*)s1 + n - 1) = (*(char*)s2 + n - 1);
n--;
}
return ret;
}//以上也是我们模拟memmove函数;
int main() {
char str1[9] = "abcdefg";
my_memmove(str1,str1+2,4);
printf("%s", str1);
return 0;
}
打印有重叠的如下:
二.memset函数:
代码语言:javascript代码运行次数:0运行复制int main() {
char str1[20] = "xxxxxxxx";
memset(str1 + 4, 'K', 2);
printf("%s", str1);
return 0;
}//如可以把从str1开始后的四个位置开始被k取代直到两个字节后
但是这个函数有个缺点无法将一个数组内所有的数据都更改,
代码语言:javascript代码运行次数:0运行复制int arr[10] = { 1,2,,4,5,6,7,8,9,10};
memset(arr, "5", 40);
for (int i = 0; i < 10; i++) {
printf("%d", arr[i]);
}//这里将不会呈现满数组的5;
三.memcmp函数:
memcmp类似于字符串中strcmp函数;比较的是两个数组内的元素大小,输出数字跟strcmp一样
类型:
代码语言:javascript代码运行次数:0运行复制int memcmp(ct void *buf1, ct void *buf2, unsigned int count);
代码语言:javascript代码运行次数:0运行复制int main() {
char str1[10] = "abd";
char str2[5] = "af";
int ret=memcmp(str1, str2, 2);
printf("%d", ret);
}
输出结果:
1·接下来我们用一个图来解释一下:
我们来用一个代码判断机器是大小端:
代码语言:javascript代码运行次数:0运行复制int main() {
int n = 1;
if (*(char*)&n == 1) {
printf("小端");
}
else printf("大端");
return 0;
2·对于有无符号字符:signed char范围为-128~127,而unsigned char 为0~255 ;
首先我们要明白我们存的是补码,再不同类型进行转化我们有时便需要整型提升以及截段啥的
因此我们还要掌握我们在有符号char类型加一从0开始到127然后再加一到-128,此后不断减小,直到-1,接着变为零这样循环。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-06-12,如有侵权请联系 cloudcommunity@tencent 删除函数内存数据数组char#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-18 20:28:52
上一篇:#整型与浮点型的储存问题#
下一篇:【简介指针】
推荐阅读
留言与评论(共有 10 条评论) |
本站网友 危险品标志 | 19分钟前 发表 |
str1); // return 0; //} 接下来会打印:7b40649ef6d4201a8ba5269a6ddf77.png我们copy有重叠的就需要用memmove函数:代码语言:javascript代码运行次数:0运行复制void* my_memmove(void* s1 | |
本站网友 蒋雯丽侄女 | 21分钟前 发表 |
接着变为零这样循环 | |
本站网友 昆明人流 | 18分钟前 发表 |
2); printf("%s" | |
本站网友 雌性激素 | 16分钟前 发表 |
size_t n) { // assert(s1 && s2); // char* start = (char*)s1; // while (n) { // *(char*)s1 =*(char*)s2; // ((char*)s1)++; // ((char*)s2)++; // n--; // } // return start;//这是我们模拟实现的memcpy;但是memcpy有个缺点不能copy重叠的内存区域 // // //} //int main() { // char str1[9] = "abcdefg"; // char str2[4] = "mnk"; // /*memcpy(str1 | |
本站网友 国际妇婴保健医院 | 14分钟前 发表 |
2 | |
本站网友 中国吉利汽车 | 25分钟前 发表 |
分享自作者个人站点/博客 | |
本站网友 集通铁路 | 30分钟前 发表 |
str1); return 0; }//如可以把从str1开始后的四个位置开始被k取代直到两个字节后但是这个函数有个缺点无法将一个数组内所有的数据都更改 | |
本站网友 斗仙什么职业好 | 24分钟前 发表 |
2 | |
本站网友 5e5e5e | 0秒前 发表 |
头文件:#include<string.h>类型:代码语言:javascript代码运行次数:0运行复制void *memcpy(void*dest |