欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門(mén)教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

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

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

本文實(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或者其他類(lèi)型,并不一定要是char類(lèi)型。例如下面這樣:

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ù)類(lèi)型的對(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)類(lèi)型的變量或數(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ì)有所幫助。

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有