memset函式
包含頭檔案:string或者memory
extern void *memset(void *buffer, int c, int count)
- buffer:為指標或是陣列,
- c:是賦給buffer的值,
- count:是buffer的長度.
這個函式在socket中多用于清空陣列.
如:原型是memset(buffer, 0, sizeof(buffer))
Memset 用來對一段記憶體空間全部設定為某個字符,一般用在對定義的字串進行初始化為‘ ’或‘/0’;
例:char a[100];memset(a, ‘/0’, sizeof(a));
memset可以方便的清空一個結構型別的變數或陣列,
清空陣列
char a[100];memset(a, '/0', sizeof(a));
清空結構體:
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
//對于變數:
struct sample_strcut stTest;
//一般情況下,清空stTest的方法:
stTest.csName[0]='/0';
stTest.iSeq=0;
stTest.iType=0;
//用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct));
清空結構體陣列:
struct sample_struct TEST[10];
memset(TEST,0,sizeof(struct sample_struct)*10);
memcpy函式
void *memcpy(void*dest, const void *src, size_t n);
包含頭檔案:string或者memory
功能:從源src所指的記憶體地址的起始位置開始,拷貝n個位元組的資料到目標dest所指的記憶體地址的起始位置中,
說明:
1)src和dest所指記憶體區域不能重疊,函式回傳指向dest的指標,如果src和dest以任何形式出現了重疊,它的結果是未定義的,
2)與strcpy相比,memcpy遇到’\0’不結束,而且一定會復制完n個位元組,只要保證src開始有n位元組的有效資料,dest開始有n位元組記憶體空間就行,
3)如果目標陣列本身已有資料,執行memcpy之后,將覆寫原有資料(最多覆寫n個),
如果要追加資料,則每次執行memcpy()后,要將目標地址增加到要追加資料的地址,
4)source和destin都不一定是陣列,任意的可讀寫的空間均可,
注意:memcpy是將原字串全部拷貝,連同\0也會拷貝
strcpy遇到\0會停止拷貝
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<memory.h>
int main()
{
char ch[20] = "abc\0efghj";
printf("%s\n", ch);
char ch1[20];
memcpy(ch1, ch, sizeof(ch));
printf("%s\n", ch1);
printf("驗證是否將原字串連同結束符一起拷貝\n");
for (int i = 4; i <=10; i++)
{
printf("%c", ch1[i]);
}
return 0;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260682.html
標籤:其他
