Hopes

          Start Here..

           

          C語言中memset函數(shù)詳解 (

          C語言中memset函數(shù)詳解

           (2011-11-16 21:11:02)
          標(biāo)簽: 

          雜談

          分類: 工具相關(guān)

          功 能: 將s所指向的某一塊內(nèi)存中的每個字節(jié)的內(nèi)容全部設(shè)置為ch指定的ASCII值,

            塊的大小由第三個參數(shù)指定,這個函數(shù)通常為新申請的內(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: ***********

          memset函數(shù)詳細說明

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

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

            2。例子

            main(){

            char *s="Golden Global View";

            clrscr();

            memset(s,'G',6);//貌似這里有點問題//

            printf("%s",s);

            getchar();

            return 0;

            } 

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

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

            char str[100];

            memset(str,0,100);

            4。memset()的深刻內(nèi)涵:用來對一段內(nèi)存空間全部設(shè)置為某個字符,一般用在對定義的字符串進行初始化為‘memset(a, '/0', sizeof(a));

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

            strcpy就只能拷貝字符串了,它遇到'/0'就結(jié)束拷貝;例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串長度(第一個‘/0’之前)是否超過50位,如超過,則會造成b的內(nèi)存地址溢出。

            5.補充:某人的一點心得

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

            如:

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

            如果是數(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ù)組中。

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

            返回指向dest的指針。

            memcpy

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

            用法:#i nclude

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

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

            memset

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

            用法:#i nclude

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

            說明:返回指向buffer的指針。

          posted on 2013-09-18 16:52 ** 閱讀(158) 評論(0)  編輯  收藏


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


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

          導(dǎo)航

          統(tǒng)計

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          收藏夾

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

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 桂平市| 张家港市| 泗阳县| 沁阳市| 筠连县| 保亭| 思南县| 疏附县| 土默特右旗| 丁青县| 乐亭县| 兰州市| 佛教| 通城县| 遂宁市| 澜沧| 樟树市| 弥勒县| 黄大仙区| 永吉县| 天津市| 洪泽县| 孟连| 乌什县| 邮箱| 南充市| 华安县| 广平县| 炎陵县| 宁都县| 新河县| 佛山市| 依兰县| 巫山县| 佳木斯市| 黑水县| 北京市| 津南区| 盱眙县| 福清市| 凤冈县|