亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++中memset函數(shù)用法詳解

 更新時(shí)間:2016年06月23日 15:23:38   作者:雨竹  
這篇文章主要介紹了C++中memset函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了memset函數(shù)的功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了C++中memset函數(shù)用法。分享給大家供大家參考,具體如下:

功 能: 將s所指向的某一塊內(nèi)存中的每個(gè)字節(jié)的內(nèi)容全部設(shè)置為ch指定的ASCII值,塊的大小由第三個(gè)參數(shù)指定,這個(gè)函數(shù)通常為新申請(qǐng)的內(nèi)存做初始化工作

用 法: void memset(void *s, char ch, unsigned n);

程序示例:

#include <string.h>
#include <stdio.h>
#include <memory.h>
int main(void)
{
char buffer[] = "Hello world\n";
printf("Buffer before memset: %s\n", buffer);
memset(buffer, '*', strlen(buffer) );
printf("Buffer after memset: %s\n", buffer);
return 0;
}

輸出結(jié)果:

Buffer before memset: Hello world
Buffer after memset: ***********

編譯平臺(tái):
Microsoft Visual C++ 6.0

也不一定就是把內(nèi)容全部設(shè)置為ch指定的ASCII值,而且該處的ch可為int或者其他類型,并不一定要是char類型。例如下面這樣:

char array[5] = {1,4,3,5,2};
for(int i = 0; i < 5; i++)
cout<<array[i]<<" ";
cout<<endl;
memset(array,"0",5*sizeof(int));
for(int k = 0; k < 5; k++)
cout<<array[k]<<" ";
cout<<endl;

輸出的結(jié)果就是:
1 4 3 5 2
0 0 0 0 0

后面的表大小的參數(shù)是以字節(jié)為單位,所以,對(duì)于int或其他的就并不是都乘默認(rèn)的1(字符型)了。而且不同的機(jī)器上int的大小也可能不同,所以最好用sizeof()。

要注意的是,memset是對(duì)字節(jié)進(jìn)行操作,所以上述程序如果改為

int array[5] = {1,4,3,5,2};
for(int i = 0; i < 5; i++)
cout<<array[i]<<" ";
cout<<endl;
memset(array,1,5*sizeof(int));// 注意 這里與上面的程序不同
for(int k = 0; k < 5; k++)
cout<<array[k]<<" ";
cout<<endl;

輸出的結(jié)果就是:
1 4 3 5 2
16843009 16843009 16843009 16843009 16843009

為什么呢?

因?yàn)閙emset是以字節(jié)為單位就是對(duì)array指向的內(nèi)存的5個(gè)字節(jié)進(jìn)行賦值,每個(gè)都用ASCII為1的字符去填充,轉(zhuǎn)為二進(jìn)制后,1就是00000001,占一個(gè)字節(jié)。一個(gè)INT元素是4字節(jié),合一起就是00000001000000010000000100000001,就等于16843009,就完成了對(duì)一個(gè)INT元素的賦值了。

所以用memset對(duì)非字符型數(shù)組賦初值是不可取的!(????我好像看到有可以啊,又帶確認(rèn))

例如有一個(gè)結(jié)構(gòu)體Some x,可以這樣清零:

memset( &x, 0, sizeof(Some) );

如果是一個(gè)結(jié)構(gòu)體的數(shù)組Some x[10],可以這樣:

menset( x, 0, sizeof(Some)*10 );

memset函數(shù)詳細(xì)說(shuō)明

1. void *memset(void *s,int c,size_t n)

總的作用:將已開(kāi)辟內(nèi)存空間 s 的首 n 個(gè)字節(jié)的值設(shè)為值 c。

2. 例子

main(){
char *s="Golden Global View";
clrscr();
memset(s,'G',6);//貌似這里有點(diǎn)問(wèn)題//
printf("%s",s);
getchar();
return 0;
}

【這個(gè)問(wèn)題相當(dāng)大,程序根本就運(yùn)行不下去了,你這里的S志向的是一段只讀的內(nèi)存,而你memset又試圖修改它,所以運(yùn)行時(shí)要出錯(cuò),修改辦法char *s修改為char s[]】

3. memset() 函數(shù)常用于內(nèi)存空間初始化。如:

char str[100];
memset(str,0,100);

4. memset()的深刻內(nèi)涵:用來(lái)對(duì)一段內(nèi)存空間全部設(shè)置為某個(gè)字符,一般用在對(duì)定義的字符串進(jìn)行初始化為‘memset(a, '\0', sizeof(a));
memcpy用來(lái)做內(nèi)存拷貝,你可以拿它拷貝任何數(shù)據(jù)類型的對(duì)象,可以指定拷貝的數(shù)據(jù)長(zhǎng)度;例:

char a[100], b[50];
memcpy(b, a, sizeof(b));
//注意如用sizeof(a),會(huì)造成b的內(nèi)存地址溢出。

strcpy就只能拷貝字符串了,它遇到'\0'就結(jié)束拷貝;例:

char a[100], b[50];
strcpy(a,b);

如用strcpy(b,a),要注意a中的字符串長(zhǎng)度(第一個(gè)‘\0'之前)是否超過(guò)50位,如超過(guò),則會(huì)造成b的內(nèi)存地址溢出。

5. 補(bǔ)充:某人的一點(diǎn)心得

memset可以方便的清空一個(gè)結(jié)構(gòu)類型的變量或數(shù)組。

如:

struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};

對(duì)于變量

struct sample_strcut stTest;

一般情況下,清空stTest的方法:

stTest.csName[0]='\0';
stTest.iSeq=0;
stTest.iType=0;

用memset就非常方便:

memset(&stTest,0,sizeof(struct sample_struct));

如果是數(shù)組:

struct sample_struct TEST[10];

則:

memset(TEST,0,sizeof(struct sample_struct)*10);

或:

memset(TEST,0,sizeof(TEST));

希望本文所述對(duì)大家C++程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法

    Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法

    這篇文章主要介紹了Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法,重點(diǎn)講解了圖標(biāo)的繪制技巧,需要的朋友可以參考下
    2016-04-04
  • C++實(shí)現(xiàn)LeetCode(90.子集合之二)

    C++實(shí)現(xiàn)LeetCode(90.子集合之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(90.子集合之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言在輸入輸出時(shí)遇到的常見(jiàn)問(wèn)題總結(jié)

    C語(yǔ)言在輸入輸出時(shí)遇到的常見(jiàn)問(wèn)題總結(jié)

    大家在平時(shí)的做題中是否會(huì)遇到和我一樣的煩惱,題目的代碼已經(jīng)基本完成,但是在輸出時(shí)候,總是和題目給出的樣例輸出格式不同?,導(dǎo)致題目不能通過(guò)。為了解決這一煩惱,我總結(jié)了以下幾點(diǎn),需要的可以參考一下
    2022-09-09
  • C語(yǔ)言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)詳解

    C語(yǔ)言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)詳解

    對(duì)于數(shù)組想必大家都不陌生首先得要知道的是對(duì)于數(shù)組元素在內(nèi)存存儲(chǔ)是連續(xù)性的,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • 淺析C語(yǔ)言字中的符串格式化顯示

    淺析C語(yǔ)言字中的符串格式化顯示

    以下是對(duì)C語(yǔ)言字中的符串格式化顯示進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • c++中new和delete操作符用法

    c++中new和delete操作符用法

    c++中new和delete運(yùn)算符是用于動(dòng)態(tài)分配和撤銷內(nèi)存的運(yùn)算符,下面是示例,大家參考使用吧
    2014-04-04
  • C++如何調(diào)用簡(jiǎn)單的python程序

    C++如何調(diào)用簡(jiǎn)單的python程序

    這篇文章主要介紹了C++如何調(diào)用簡(jiǎn)單的python程序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++初級(jí)線程管理

    C++初級(jí)線程管理

    這篇文章主要介紹了C++初級(jí)線程管理,C++11中提供了std::thread庫(kù),本文將從線程的啟動(dòng)、線程等待、線程分離、線程傳參、線程識(shí)別等幾個(gè)方面介紹初級(jí)線程管理的知識(shí),需要的朋友可以參考一下
    2021-12-12
  • C語(yǔ)言中dlopen和dlsym的使用方式詳解

    C語(yǔ)言中dlopen和dlsym的使用方式詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言中dlopen和dlsym的使用方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 詳解C++編程中類模板的相關(guān)使用知識(shí)

    詳解C++編程中類模板的相關(guān)使用知識(shí)

    這篇文章主要介紹了詳解C++編程中類模板的相關(guān)使用知識(shí),包括函數(shù)的參數(shù)類型替換等方法,需要的朋友可以參考下
    2015-09-09

最新評(píng)論