memset


轉:https://blog.csdn.net/qq_27522735/article/details/53374765
1.
對於大塊兒內存的分配,例如int arr[100];定義了數組arr,包含100個元素,如果你寫成int arr[100]=0;想將數組全部內容初始化為0,是不行的,連編譯都不能通過。
這種情況的初始化,有兩種方法,一種是一個一個的初始化,如

   arr[i]=0;

就完成了數組的初始化。
另一種方法,就是使用memset:一個語句就夠了memset(arr,0,sizeof(int)*100);

2.strcpy
原型:extern char *strcpy(char *dest,char *src);
功能:把src所指由NULL結束的字符串復制到dest所指的數組中。
說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
返回指向dest的指針。

Strcpy 就只能拷貝字符串了,它遇到'/0'就結束拷貝。

3.memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
功能:由src所指內存區域復制count個字節到dest所指內存區域。
說明:src和dest所指內存區域不能重疊,函數返回指向dest的指針。

memcpy用來做內存拷貝,你可以拿它拷貝任何數據類型的對象,可以指定拷貝的數據長度。
例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),會造成b的內存地址溢出。

4.memset
原型:extern void *memset(void *buffer, int c, int count);
功能:把buffer所指內存區域的前count個字節設置成字符c。
說明:返回指向buffer的指針。

5.以下demo是可以的,能把數組中的元素值都設置成字符1,

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
     char a[5];
     memset(a,'1',5);
     for(int i = 0;i < 5;i++)
       cout<<a[i]<<"   ";
     system("pause");
     return 0;
}

image

但是下面這個卻不行:

   int a[5];
     memset(a,1,5);//這里改成memset(a,1,5 *sizeof(int))也是不可以的
     for(int i = 0;i < 5;i++)
       cout<<a[i]<<"   ";
     system("pause");
     return 0;

image

因為第一個程序的數組a是字符型的,字符型的占內存大小是1Byte,而memset函數也是以字節為單位進行賦值的,所以你輸出
沒有問題。而第二個程序a是整型的,使用memset還是按字節賦值,這樣賦值完以后,每個數組元素的值實際上是0x01010101即十進制的16843009。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM