• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            MyMSDN

            MyMSDN記錄開發(fā)新知道

            Expert C Programming notes

            1、const其實并不是真正的常量(P32)

            const_is_not_constant

            2、早期的gets()中的Bug導致了Internet蠕蟲(P42)

            gets()函數(shù)并不檢查緩沖區(qū)的空間,事實上它也無法檢查緩沖區(qū)的空間。如果函數(shù)的調用者提供了一個指向堆棧的指針,并且gets()函數(shù)讀入的字符數(shù)量超過緩沖區(qū)的空間,gets()函數(shù)將會愉快地將多出來的字符繼續(xù)寫入到堆棧中,這就覆蓋了堆棧原先的內容。——這就是病毒利用它來寫入額外空間,并引發(fā)蠕蟲病毒的前提。

            推薦的方式是將

            gets(line)

            替換為

            if(fgets(line, sizeof(line), stdin) == NULL)

            exit(1);

            3、相鄰字符串常量自動連接(P45)

            這個其實已經應用很普遍了,但是我個人用的比較少,特此記錄一下。

            ansi-c_connect_string

            4、返回一個指針?(P48)

            這個話題圍繞一個程序的BUG來展開,這個程序返回了局部變量的值的指針,這么說當然你一眼就能看得出來問題所在,但是在很多時候,這個錯誤卻總是在你的眼皮子底下溜走。

            作者提供了五種方式,只能說可以用,但唯一推薦的只有一個,詳見作者的分析(P48)(不是什么高深的理論,你自己也能分析地出來)。

            a.返回一個字符串常量的指針。因為常量存在靜態(tài)數(shù)據(jù)存儲區(qū),所以指針沒問題。

            b.使用全局聲明的數(shù)組。提到全局兩個字,就知道這個方法有很大的局限性。

            c.使用靜態(tài)數(shù)組。下一次調用將覆蓋這個數(shù)組內容。

            char * func() {

            static char buffer[20];

            return buffer;

            }

            d.顯式分配一些內存,保存返回的值。

            char  * func() {

            char * s = malloc(120);

            return s;

            }

            既然用到了malloc,就必然伴隨著free,因此帶來了內存管理的問題,增加了開發(fā)者負擔。

            e.(推薦)在調用前后,由函數(shù)調用者分配內存,并由其釋放,在同一地方釋放對于內存管理來說代價相對最小。

            void func( char * result, int size) {

            strncpy(result, “That’d be in the data segment, Bob”, size);

            }

            buffer = malloc(size);

            func(buffer, size);

            free(buffer);

            posted on 2009-04-01 00:31 volnet 閱讀(330) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            特殊功能
             
            亚洲午夜福利精品久久| 欧洲人妻丰满av无码久久不卡| 97久久超碰成人精品网站| 99久久国产免费福利| 久久精品aⅴ无码中文字字幕不卡| 无码国产69精品久久久久网站| 99久久人妻无码精品系列| 久久久无码精品午夜| 青青草原精品99久久精品66 | 国产精品久久久久久久午夜片| 久久精品国产亚洲7777| 久久国产热精品波多野结衣AV| 久久久99精品成人片中文字幕| 久久精品国产亚洲av麻豆小说| 久久一区二区三区免费| 久久精品国产69国产精品亚洲| 久久综合九色综合网站| 成人亚洲欧美久久久久 | 人人狠狠综合久久亚洲高清| 久久午夜羞羞影院免费观看| 亚洲а∨天堂久久精品9966| 色综合合久久天天综合绕视看 | 久久精品中文字幕久久| 久久AV高潮AV无码AV| 四虎国产精品免费久久| 亚洲狠狠久久综合一区77777| 久久精品人人槡人妻人人玩AV| 99久久免费国产精品特黄| 亚洲精品99久久久久中文字幕| 88久久精品无码一区二区毛片| 久久99国产精品99久久| 99久久国产精品免费一区二区 | 久久精品国产亚洲av麻豆图片| 久久人人爽人人精品视频| 久久国产乱子伦精品免费午夜| 久久香蕉一级毛片| 精品久久人人做人人爽综合| 国产一区二区三精品久久久无广告 | 精品伊人久久大线蕉色首页| 国产精品久久久久a影院| 无码八A片人妻少妇久久|