欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實現(xiàn)內(nèi)存函數(shù)的示例代碼

 更新時間:2025年02月05日 09:12:32   作者:愛學(xué)習的徐徐  
本文主要介紹了C語言實現(xiàn)內(nèi)存函數(shù)的示例代碼,包括memcpy、memmove、memset和memcmp的使用,具有一定的參考價值,感興趣的可以了解一下

一、前言

在C語言中有著常見的內(nèi)存函數(shù),他們可以對內(nèi)存進行操作,即可以修改內(nèi)存的內(nèi)容等,下面我們來簡略地學(xué)習一下

二、memcpy(內(nèi)存復(fù)制)

cpy是復(fù)制的意思,顧名思義,就是將一塊指定大小的內(nèi)存的字節(jié)逐一賦值到新的內(nèi)存塊上,下面是memcpy的定義

void * memcpy ( void * destination, const void * source, 1 size_t num );

下面我們可以舉一個簡單的使用案例

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

int main() {
	int arr1[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int arr2[10];
	
	memcpy(arr2, arr1, sizeof(arr1));

	for (int i = 0; i < 10; i++) {
		printf("%d ", arr2[i]);
	}
	printf("\n");

	return 0;
}

在這里插入圖片描述

可以看到,這里我將arr1數(shù)組的內(nèi)存數(shù)據(jù)復(fù)制到了arr2數(shù)組中

memcpy使用細節(jié):

  • 目標空間大小不能小于要拷貝的內(nèi)存的大小
  • memcpy不會因為遇到’\0’而停止
  • memcpy目標內(nèi)存不能是拷貝的內(nèi)存,不然復(fù)制的結(jié)果是不可預(yù)知的,也就是說內(nèi)存不能重疊,如:memcpy(arr, arr, …)

三、 memmove(內(nèi)存移動)

memmove的功能與memcpy的功能可以說是一樣的,但是memmove有一個與memcpy不同的點,就是memmove可以操作重疊的內(nèi)存,因為memmove會將要復(fù)制的內(nèi)存的內(nèi)容復(fù)制到臨時緩沖區(qū),然后再復(fù)制帶目標內(nèi)存中

void * memmove ( void * destination, const void * source,size_t num );

下面我們進行演示

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

int main() {
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int arr2[10];

	memmove(arr2, arr1, sizeof(arr1));
	memmove(arr1 + 1, arr1, sizeof(int) * 9);

	for (int i = 0; i < 10; i++) {
		printf("%d ", arr1[i]);
	}
	printf("\n");

	for (int i = 0; i < 10; i++) {
		printf("%d ", arr2[i]);
	}

	return 0;
}

在這里插入圖片描述

這里我將arr1中的數(shù)據(jù)復(fù)制到了arr2中,然后將arr1的數(shù)據(jù)進行了后移

四、memset(內(nèi)存設(shè)置)

memset的函數(shù)的作用是將指定內(nèi)存大小的內(nèi)存塊中的值設(shè)置為想要的值

void * memset ( void * ptr, int value, size_t num );

下面我們來舉例一些例子

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

int main() {
	char arr1[] = "HelloWorld!";
	printf("%s\n", arr1);

	memset(arr1, 'X', 5);

	printf("%s\n", arr1);

	return 0;
}

在這里插入圖片描述

這里我使用了memset函數(shù)將Hello替換成了X

五、memcmp(比較指定字節(jié))

memcmp 逐字節(jié)比較兩個內(nèi)存區(qū)域的內(nèi)容,比較的字節(jié)數(shù)由參數(shù) n 指定。比較從兩個內(nèi)存區(qū)域的起始位置開始,依次比較每個字節(jié)的值

返回值

  • 如果兩個內(nèi)存區(qū)域在前 n 字節(jié)內(nèi)完全相同,返回 0。
  • 如果第一個不同的字節(jié)在 s1 中的值小于 s2 中的值,返回 負整數(shù)。
  • 如果第一個不同的字節(jié)在 s1 中的值大于 s2 中的值,返回 正整數(shù)。
int memcmp ( const void * ptr1, const void * ptr2, size_t num );

同樣我們舉例一下案例

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

int main() {
	char arr1[] = "HelloWorld!";
	char arr2[] = "AelloWorld!";

	if (memcmp(arr1, arr2, sizeof(arr1)) > 0) {
		printf("arr1字符串大!\n");
	}

	return 0;
}

在這里插入圖片描述

這里我使用了字符串比較,但并不代表著只能比較字符串,memcmp也可以比較其他類型的數(shù)組

使用細節(jié)

  • 比較的字節(jié)數(shù): memcmp 只比較指定的 n 字節(jié)。如果兩個內(nèi)存區(qū)域在前 n 字節(jié)內(nèi)相同,即使后面的字節(jié)不同,memcmp 也會返回 0
  • 內(nèi)存區(qū)域的大?。?/strong> 確保兩個內(nèi)存區(qū)域的大小至少為 n 字節(jié),否則可能會導(dǎo)致未定義行為(如訪問越界)
  • 返回值的含義: memcmp 的返回值是一個整數(shù),表示兩個內(nèi)存區(qū)域的比較結(jié)果。返回值的具體值(正數(shù)或負數(shù))取決于第一個不同的字節(jié)的值

六、End

到此這篇關(guān)于C語言實現(xiàn)內(nèi)存函數(shù)的示例代碼的文章就介紹到這了,更多相關(guān)C語言 內(nèi)存函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論