<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Hopes

    Start Here..

     

    memset

    memset使用詳解



    功 能: 將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 <mem.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)型。例如下面這樣:

    int array[5] = {1,4,3,5,2};

    for(int i = 0; i < 5; i++)

    cout<<array<<" ";

    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<<" ";

    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é),合一起就是 1000000010000000100000001,就等于16843009,就完成了對(duì)一個(gè)INT元素的賦值了。

    所以用memset對(duì)非字符型數(shù)組賦初值是不可取的!

    樓上說(shuō)的很對(duì),只是程序執(zhí)行結(jié)果是0 0 0 0;程序不同的地方不在那里。程序如下:

    int array[5] = {1,4,3,5,2};

    for(int i = 0; i < 5; i++)

    cout<<array<<" ";

    cout<<endl;

    memset(array,1,5*sizeof(int)); //這里才是不同的地方

    for(int k = 0; k < 5; k++) //不同不在這里,k=1只是少循環(huán)了一次而已

    cout<<array[k]<<" ";

    cout<<endl;

    例如有一個(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);

    6。strcpy

    原型:extern char *strcpy(char *dest,char *src);

    用法:#i nclude

    功能:把src所指由NULL結(jié)束的字符串復(fù)制到dest所指的數(shù)組中。

    說(shuō)明:src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來(lái)容納src的字符串。

    返回指向dest的指針。

    memcpy

    原型:extern void *memcpy(void *dest, void *src, unsigned int count);

    用法:#i nclude

    功能:由src所指內(nèi)存區(qū)域復(fù)制count個(gè)字節(jié)到dest所指內(nèi)存區(qū)域。

    說(shuō)明:src和dest所指內(nèi)存區(qū)域不能重疊,函數(shù)返回指向dest的指針。

    memset

    原型:extern void *memset(void *buffer, int c, int count);

    用法:#i nclude

    功能:把buffer所指內(nèi)存區(qū)域的前count個(gè)字節(jié)設(shè)置成字符c。

    說(shuō)明:返回指向buffer的指針。

    原文鏈接:http://baike.baidu.com/view/982208.htm
    <====================================================================================================>

    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;
    } 
    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);

    6。strcpy
    原型:extern char *strcpy(char *dest,char *src);
    用法:#i nclude
    功能:把src所指由NULL結(jié)束的字符串復(fù)制到dest所指的數(shù)組中。
    說(shuō)明:src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來(lái)容納src的字符串。
    返回指向dest的指針。


    memcpy
    原型:extern void *memcpy(void *dest, void *src, unsigned int count);
    用法:#i nclude
    功能:由src所指內(nèi)存區(qū)域復(fù)制count個(gè)字節(jié)到dest所指內(nèi)存區(qū)域。
    說(shuō)明:src和dest所指內(nèi)存區(qū)域不能重疊,函數(shù)返回指向dest的指針。



    memset
    原型:extern void *memset(void *buffer, int c, int count);
    用法:#i nclude
    功能:把buffer所指內(nèi)存區(qū)域的前count個(gè)字節(jié)設(shè)置成字符c。
    說(shuō)明:返回指向buffer的指針。

    原文鏈接:http://www.azure.net.ru/read.php/137.htm

    posted on 2012-09-09 13:57 ** 閱讀(289) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): C/C++


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    你好!

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章分類(lèi)

    文章檔案

    新聞檔案

    相冊(cè)

    收藏夾

    C#學(xué)習(xí)

    友情鏈接

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲av日韩av永久无码电影 | 青青免费在线视频| 免费国产黄网站在线观看| 91免费在线视频| 亚洲无码高清在线观看| 在线精品亚洲一区二区三区| 亚洲精品你懂的在线观看| 亚洲福利一区二区精品秒拍| 亚洲aⅴ天堂av天堂无码麻豆| 豆国产96在线|亚洲| 国产免费阿v精品视频网址| 亚欧免费一级毛片| 亚洲国产精品无码专区在线观看| 亚洲欧洲国产成人精品| 99亚洲乱人伦aⅴ精品| 午夜免费福利片观看| 国产成人免费高清在线观看| 国产AV无码专区亚洲AV毛网站| 亚洲伊人久久大香线蕉结合| 亚洲国产综合久久天堂| 亚洲片一区二区三区| 亚洲欧洲中文日产| 成年人在线免费观看| 亚洲成在人天堂在线| 边摸边吃奶边做爽免费视频网站| 97视频免费观看2区| 亚洲男人的天堂一区二区| 久久精品国产亚洲αv忘忧草| 久久国产精品免费一区| 日本人的色道www免费一区| 亚洲黄色在线视频| 天天天欲色欲色WWW免费| 中文字幕亚洲综合久久| 精品97国产免费人成视频| 国产麻豆剧传媒精品国产免费| 亚洲四虎永久在线播放| 99免费在线视频| 日韩亚洲产在线观看| 67194国产精品免费观看| 亚洲熟妇丰满多毛XXXX| 免费激情网站国产高清第一页 |