1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        C 語言實現(xiàn)動態(tài)字符串

        共 17523字,需瀏覽 36分鐘

         ·

        2021-07-03 19:36

        在C語言中,字符串是以連續(xù)的字節(jié)流表示的,并且以 '\0' 結(jié)尾,C語言標(biāo)準(zhǔn)庫中也提供了很多函數(shù)來操作這種形式的字符串,比如,求字符串長度 strlen( ),求子串strstr( ),字符串拷貝strcpy( )等等,但是,這些函數(shù)并不安全,很可能給系統(tǒng)或應(yīng)用程序帶來嚴(yán)重的問題,如棧溢出等,C語言字符串中并沒有記錄操作系統(tǒng)為其分配的長度,用戶必須自己將字符串長度保存在其他的變量中,很明顯如果操作不當(dāng)就會產(chǎn)生錯誤,如臭名昭著的緩沖區(qū)溢出。

        其他語言中的字符串類型通常在存儲字符串本身時也保存了字符串長度,如Pascal,這樣做的好處是字符串也可以以空字符'\0'結(jié)尾,但也會產(chǎn)生緩沖區(qū)溢出錯誤,本文實現(xiàn)了一個簡單的動態(tài)字符串庫,首先考慮一下,采用什么樣的數(shù)據(jù)結(jié)構(gòu)可以避免緩沖區(qū)溢出問題呢,為簡化起見,我們定義“字符串”為內(nèi)存中無類型的字節(jié)流,因此可以避開本地化和Unicode等概念,首先定義數(shù)據(jù)結(jié)構(gòu)如下:

        #ifndef __DSTRING_H
        #define __DSTRING_H

        typedef struct _dstring dstring;
        struct _dstring
        {

            char *pstr;
            size_t str_sz;
            size_t buf_sz;
        };
        #endif

        pstr 是指向字符串的指針,str_sz 是字符串長度,而 buf_sz則是包含該字符串的緩沖區(qū)長度。

        接下來一個問題就是為字符串分配存儲空間,由于內(nèi)存分配可能失效,所以我們需要檢查內(nèi)存分配是否成功,一種可行的方法是在分配函數(shù)中返回錯誤碼,但是,這樣設(shè)計的API不太簡潔實用,另外一個可選方案是事先注冊一個回調(diào)函數(shù),在內(nèi)存分配失敗時再調(diào)用該函數(shù),但如果多個客戶程序同時申請內(nèi)存,該方法也會失效,C++中我們可以使用異常來處理這種情況,但是 C 不支持異常,所以該方法也不太現(xiàn)實。其實,某些其他的標(biāo)準(zhǔn)庫代碼也有類似的問題,如數(shù)學(xué)庫中某個函數(shù)對一個負(fù)數(shù)進(jìn)行求根運(yùn)算,返回結(jié)果本來是double,為了表明函數(shù)調(diào)用出錯,我們可以讓函數(shù)返回NaN(Not a Number),因此程序在需要檢查該函數(shù)調(diào)用是否出錯時可以檢查返回值。

        我們也采用與此類似的方法,如果內(nèi)存分配出錯,那么動態(tài)字符串返回NaS(Not a String)狀態(tài),任何返回NaS的操作將維護(hù)該狀態(tài),因此程序只需要在必要的時候檢查其返回值,為了實現(xiàn)該效果,我們可以定義如下的宏,

        #define NaS ((string) {NULL, 0, 0})
        #define isnas(S) (!(S)->pstr)

        static size_t dstr_size(dstring *s)
        {
            if (isnas(s)) return 0;
            return pstr->str_sz;
        }

        接下來的問題是字符串指針可能指向不同的位置,例如,可以是在編譯時刻就確定的靜態(tài)區(qū),也可以棧中的某個位置,還可以只由malloc或realloc函數(shù)分配動態(tài)內(nèi)存區(qū)(堆區(qū)),只有在堆區(qū)分配的內(nèi)存才能夠被resize,即realloc( ),并且需要顯式地free( ),因此我們需要記錄字符串指向區(qū)域的類型,我們選擇了 buf_sz 的高位來保存該狀態(tài),基于以上想法,我們?nèi)缦露x內(nèi)存分配函數(shù):

        #define DSTR_FREEABLE (1ULL << 63)
        /* An initialized empty struct string */
        #define DSTR_INIT ((string) {malloc(16), 0, (16)})

        static dstring dstr_malloc(size_t size)
        {
            if (size < 16) size = 16;
            return (dstring) {malloc(size), 0, size | DSTR_FREEABLE};
        }

        /* Try to compact string memory */
        static void dstr_realloc(dstring *s)
        {
            char *buf;
            
            /* Not a string? */
            if (isnas(s)) return;
            
            /* Can't realloc? */
            if (!(s->buf_sz & DSTR_FREEABLE)) return;
            
            /* Don't invoke undefined behaviour with realloc(x, 0) */
            if (!s->str_sz){
                free(s->pstr);
                s->pstr = malloc(16);
            } else {
                /* Try to compact */
                buf = realloc(s->pstr, s->str_sz);
                if (buf) s->pstr = buf;
            }
        }

        static void dstr_resize(dstring *s, size_t size)
        {
            char *buf;
            size_t bsize;
            
            /* Are we not a string? */
            if (isnas(s)) return;
            
            /* Not resizable */
            if (!(s->buf_sz & DSTR_FREEABLE)) {
                dstring s2;
                
                /* Don't do anything if we want to shrink */
                if (size <= s->str_sz) return;
                
                /* Need to alloc a new string */
                s2 = dstr_malloc(size);
                
                /* Copy into new string */
                memcpy(s2.pstr, s->pstr, s->str_sz);
                
                /* Point to new string */
                s->pstr = s2.pstr;
                s->buf_sz = s2.buf_sz;
                return;
            }
            
            /* Too big */
            if (size & DSTR_FREEABLE)
            {
                free(s->pstr);
                *s = NaS;
                return;
            }
            
            bsize = s->buf_sz - DSTR_FREEABLE;
            
            /* Keep at least 16 bytes */
            if (size < 16) size = 16;
            
            /* Nothing to do? */
            if ((4 * size > 3 * bsize) && (size <= bsize)) return;
            
            /* Try to double size instead of using a small increment */
            if ((size > bsize) && (size < bsize * 2)) size = bsize * 2;
            
            /* Keep at least 16 bytes */
            if (size < 16) size = 16;

            buf = realloc(s->pstr, size);
            
            if (!buf) {
                /* Failed, go to NaS state */
                free(s->pstr);
                *s = NaS;
            } else {
                s->pstr = buf;
                s->buf_sz = size | DSTR_FREEABLE;
            }
        }

        static void dstr_free(dstring *s)
        {
            if (s->buf_sz & DSTR_FREEABLE) free(s->pstr);
            
            *s = NaS;
        }

        有了以上的函數(shù),我們可以定義如下宏,以便將C風(fēng)格的字符串轉(zhuǎn)換為我們的動態(tài)字符串,

        /*
         * Copy a struct dstring to the stack.
         * (Could use strdupa(), but this is more portable)
         */

        #define dstr_dupstr_aux(S)\
            __extension__ ({\
                char *_stradupstr_aux = alloca((S).str_sz + 1);\
                memcpy(_stradupstr_aux, (S).pstr, (S).str_sz);\
                dstr_straux(_stradupstr_aux, (S).str_sz);\
            })


        #define dstr_adupstr(S) dstr_dupstr_aux(*(S))

        /* A struct dstring based on a C string, stored on the stack */
        #define S(C) dstr_dupstr_aux(dstr_cstr((char *)C))

        static dstring dstr_straux(char *c, size_t len)
        {
            return (dstring) {c, len, len + 1};
        }

        /* A struct dstring based on a C string, stored in whatever c points to */
        static dstring dstr_cstr(char *c)
        {
            size_t len = strlen(c);
            return dstr_straux(c, len);
        }

        上述代碼中的宏S(C)使用了alloca在棧上分配空間,這意味著該空間不需要顯示的釋放,在函數(shù)退出時將自動被系統(tǒng)回收。

        大多數(shù)時候,字符串分配在棧中,但是,有時候我們也需要將字符串保存在生命周期更長的結(jié)構(gòu)中,此時,我們就需要顯式地為字符串分配空間:

        /* Create a new dstring as a copy of an old one */
        static dstring dstr_dupstr(dstring *s)
        {
            dstring s2;
            
            /* Not a string? */
            if (isnas(s)) return NaS;
            
            s2 = dstr_malloc(s->str_sz);
            s2.str_sz = s->str_sz;
            memcpy(s2.pstr, s->pstr, s->str_sz);
            
            return s2;
        }

        /* Copy the memory from the source string into the dest string */
        static void dstr_cpystr(dstring *dest, dstring *src)
        {
            /* Are we no a string */
            if (isnas(src)) return;
            
            dstr_resize(dest, src->str_sz);
            
            if (isnas(dest)) return;
            dest->str_sz = src->str_sz;
            memcpy(dest->pstr, src->pstr, src->str_sz);
        }

        搜索公眾號C語言中文社區(qū)后臺回復(fù)“C語言”,免費領(lǐng)取200G編程資源。

        當(dāng)然,既然C語言標(biāo)準(zhǔn)庫使用以Null結(jié)尾的字符串,我們需要將動態(tài)字符串轉(zhuǎn)換成C風(fēng)格的字符串,如下:

        static char *dstr_tocstr(dstring *s)
        {
            size_t bsize;
            
            /* Are we not a string? */
            if (isnas(s)) return NULL;
            
            /* Get real buffer size */
            bsize = s->b_str_sz & ~DSTR_FREEABLE;
            
            if (s->str_sz == bsize){
                /* Increase buffer size */
                dstr_resize(s, bsize + 1);
                /* Are we no longer a string? */
                if (isnas(s)) return NULL;
            }
            
            /* Tack a zero on the end */
            s->pstr[s->str-sz] = 0;
            /* Don't update the size */
            /* Can use this buffer as long as you don't append anything else */
            return s->pstr;
        }

        當(dāng)然,上面的所講的內(nèi)容并沒有完全解決緩沖區(qū)溢出的問題,因此,我們可以定義一下的宏來進(jìn)行邊界檢查,

        #ifdef DEBUG_CHECK_BOUNDS
        #define S_C(S, I)\
            (* __extension__ ({\
                assert((I) >= 0);\
                assert((I) < (S)->str_sz);\

                assert((I) < ((S)->buf_sz & ~DSTR_FREEABLE));\
                &((S)->s[I]);\
            }))
        #else
        #define S_C(S, I) ((S)->s[I])
        #endif

        接下來的任務(wù)是向動態(tài)字符串中追加新的C類型的字符串,

        static void dstr_ncatcstr(dstring *s, size_t len, const char *str)
        {
            size_t bsize;
            
            /* Are we not a string? */
            if (isnas(s)) return;
            
            /* Nothing to do? */
            if (!str || !len) return;
            
            /* Get real buffer size */
            bsize = s->buf_sz & ~DSTR_FREEABLE;
            
            if (s->str_sz + len >= bsize)
            {
                dstr_resize(s, s->str_sz + len);
                
                /* Are we no longer a string? */
                if (isnas(s)) return;
            }
            
            memcpy(&s->pstr[s->str_sz], str, len);
            s->str_sz += len;
        }

        static void dstr_catcstr(dstring *s, const char *str)
        {
            if (str) dstr_ncatcstr(s, strlen(str), str);
        }

        static void dstr_catstr(dstring *s, const dstring *s2)
        {
            dstr_ncatcstr(s, s2->str_sz, s2->pstr);
        }

        static void dstr_catcstrs(dstring *s, ...)
        {
            const char *str;
            va_list v;
            
            /* Are we not a string? */
            if (isnas(s)) return;
            
            va_start(v, s);
            
            for (str = va_arg(v, const char *); str; str = va_arg(v, const char *))
            {
                dstr_ncatcstr(s, strlen(str), str);
            }
            
            va_end(v);
        }

        static void dstr_catstrs(dstring *s1, ...)
        {
            const dstring *s2;
            va_list v;
            
            /* Are we not a string? */
            if (isnas(s1)) return;
            
            va_start(v, s1);
            
            for (s2 = va_arg(v, const dstring *); s2; s2 = va_arg(v, const dstring *)) {
                dstr_ncatcstr(s1, s2->str_sz, s2->pstr);
            }
            
            va_end(v);
        }

        最后容易出現(xiàn)緩沖區(qū)溢出情況是格式化輸入,由于不知道輸入串長度,所以使用sprintf( ) 函數(shù)也比較容易出錯(本地化),snprintf( ) 能夠解決該問題,但是輸出緩沖區(qū)太小了,很容易被截斷,

        static void dstr_printf(dstring *s, const char *fmt, ...)
        {
            va_list v;
            size_t len;
            
            /* Are we not a string? */
            if (isnas(s)) *s = DSTR_INIT;
            
            /* Nothing to do? */
            if (!fmt) return;
            
            va_start(v, fmt);
            len = vsnprintf(NULL0, fmt, v) + 1;
            va_end(v);
            
            dstr_resize(s, len);
                
            /* Are we no longer a string? */
            if (isnas(s)) return;

            va_start(v, fmt);
            vsnprintf(s->s, len, fmt, v);
            va_end(v);
            s->str_sz = len - 1;
        }

        最后,我們經(jīng)常在棧中分配格式化字符,以下函數(shù)可以將結(jié)果打印至屏幕會文件,

        /* Use a (C string) format and return a stack-allocated struct dstring */
        #define straprintf(...)\
            __extension__ ({\
                size_t _straprintf_len = snprintf(NULL, 0, __VA_ARGS__) + 1;\
                char *_straprintf_buf = alloca(_straprintf_len);\
                snprintf(_straprintf_buf, _straprintf_len, __VA_ARGS__);\
                dstr_straux(_straprintf_buf, _straprintf_len - 1);\
            })

        至此,動態(tài)字符串的大部分API已經(jīng)介紹完畢,使用上面所講的函數(shù)和宏將會大大減少緩沖區(qū)溢出的危險,因此推薦各位同學(xué)在實際需要中使用上述的函數(shù)和宏。

        瀏覽 87
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            波多野结衣高清无码| 韩国无码AV| 超碰97免费| 影音先锋AV天堂| 一区二区高清无码| 亚洲国产中文字幕| 黄片无码在线观看| 成人电影综合网| 一级色色| 国产精品视频一区二区三区在线观看| 91精品国久久久久久无码一区二区三区| 中文字幕乱码亚州无线码日韩理论电| 亚洲性爱小说| 老熟女17页一91| 一区二区黄| 淫香淫色天天影视| 亚洲欧美91| 欧美AAAAAA视频| 欧美伊人网| 麻豆国产一区二区三区四区| 亚洲在线大香蕉| 久久精品人人| 日本色影院| 无码一区二区三区四季| 欧美亚韩一区二区三区| 精品无码电影| 青娱乐最新官网| 无码在线免费播放| 台湾精品一区二区三区| 亚洲综合免费观看高清完整版在线观| 手机毛片在线播放| 欧美操操操| 天天色天天干天天日| 亚洲日逼视频| 自拍成人视频| 九九九九九九精品| 国产av小电影| 成人免费无码激情AV片| 人人操人人超碰| 午夜乱伦| 18禁在线播放| 91丨九色丨熟女老版| 日本无码高清| 淫色五月| 99久久99久久精品免费看小说。| 亚洲69v久久久无码精品| 国产精品做爱| 天天色图片| 国产精品欧美综合在线| av免费网站| 久久久9999| 五月激情六月丁香| 无码免费视频观看| 波多野结衣无码一区二区| 亚洲成人在线网| 韩国无码高清视频| 中文字幕在线播放第一页| 中文成人在线| 翔田千里无码流出两部| 洞av | 中文字幕亚洲天堂| 国产精品卡一| 国产熟女自拍| 日韩无码三级视频| 国产尤物在线| 人妻精品一区二区在线| 强波多野结衣黑人| 日本欧美在线观看高清| 波多野结衣视频在线播放| 一级免费黄色电影| 久久成人片| 在线观看黄色AV| 久久久成人免费电影| 亚洲黄色视频在线| 国产高清视频在线播放| 黄色草逼视频| 你懂的视频在线播放| 亚洲精品一级| 五月天天| 精品丰满人妻一区二区三区免费观| 先锋成人电影| 色婷婷综合视频| 久久久久久久极品内射| 免费黄色小视频在线观看| 成人做爱免费看| 婷婷激情丁香五月天| 激情麻豆论坛| 成人做爰免费网站2023| 俺去操| 精品黄片| 91视频导航| 国产精品免费在线| 成人777| 欧美一级性爱| 果冻传媒A片一二三区| 久久免费精品视频| 91综合娱乐| 神马午夜51| 免费福利在线观看| 激情五月天成人| 国产成人网| 欧美日韩国产一区二区三区| 欧美自拍视频在线观看| 欧美成人猛片AAAAAAA| 日韩免费高清视频| 国产黄片在线免费观看| 免费看一级无码成人片| 欧美性爱综合网| 国产成人视频在线观看| 97资源在线| 午夜天堂精品久久久久| 91久久国产综合久久91| 午夜福利无码视频| 国产777| 成人黄色在线观看| 极品美女援交在线| 欧美一区二区三区激情| 国产一区二区三区成人| 91人兽| 天天日天天爱| 国产AV综合网| 99re99热| 亚洲无码三级视频| 另类老妇奶性BBWBBwBBw| 日韩A∨| 老师搡BBBB搡BBB| www高清无码| 影音先锋国产AV| 中文字幕丰满熟妇人妻| 一区二区三区四区在线播放| 成人网站毛片| 人人澡人人添人人爽人人| 欧美亚洲天堂网| 91探花视频精选在线播放| 国产精成人品| 日韩人妻中文字幕| 久久婷婷五月天| 日本成人不卡视频| 久艹AV| 亚洲人做受| 国产欧美精品一区二区三区| 人妻综合第一页| 国产精品人妻无码久久久郑州天气网 | 91综合色| 爱搞视频| 精品无码蜜桃| 免费一级大片| 日韩高清在线播放| 成人三级片在线| 国产资源av| 超碰麻豆| 操逼视频免费看| 中国一级黄色A片| 青春草在线免费观看| 热re99久久精品国产99热| 日韩一级片在线| 无码a级| 亚洲无码91| 性欧美69| 操逼五月天| 综合天堂AV久久久久久久| 日本免费A片| 日本操B久久| 黄色A片网| 樱桃Av| 黄色av免费网站| 成年免费视频| 欧美另类| 在线国产小视频| 91热视频| 黄色影视不卡| 成人五月天黄色电影| 欧美性xxxxx| 亚洲ww国产a大作| 在线国产91| 色色色热热热| 国产一二三视频| 一级爱爱| 国外成人在线视频老鸭窝| 狠狠色噜噜狠狠狠7777米奇网 | 亚洲网站在线免费观看| 人妻黑人一区二区三区| 午夜69成人做爱视频网站| 亚洲免费观看高清完整版在va线| 91久久国产性奴调教| 神马午夜| 91人妻人人澡人人爽人人| 99热久| 日韩v欧美v日本v亚洲v国产v | 久久精品网| 亚洲成人AV一区二区| 51妺嘿嘿午夜福利视频| 加勒比无码在线播放| 中文字幕av无码| 免费无码国产在线怀| 欧美操逼大片| 国产三级午夜理伦三级| 欧美日韩黄| 成人伦理聚合| xxxx色| 黄片小视频在线观看| 久久中文视频| 中文字幕高清在线中文字幕中文字幕 | 丁香六月婷婷激情| 欧美一级日韩| 激情五月天丁香| 欧美精产国品一二三| 求毛片网址| 尤物网站在线观看| 九九热国产视频| 亚洲高清无码视频在线观看| 无码一区二区av| 亚洲AV人人夜夜澡人人| 91人妻人人澡人人爽人人精 | 伊人性视频| 日韩AV无码一区二区| 久草视| 操逼操| 色多多导航| 久久肏逼| 黑人一级| 日本三级片视频不卡| 中文字幕无码一区二区三区一本久 | 国产黄色在线播放| avcom无码| 人妻熟女88AⅤ| 九九九精品在线| 欧美一级黄色电影| 色婷婷官网| 黄网站在线免费| 91精品久久久久久粉嫩| 丁香六月婷婷| 中文字幕日韩美| 北条麻妃被躁57分钟视频在线| 51成人网站免费| 色大香蕉伊人| 日韩一级成人片| 日韩中文字幕有码| 青青草免费在线视| 北条麻妃AV观看| 精品人妻一区二区蜜桃视频| 青娱乐av| 国产精品一区二区在线播放| av黄片| 青青草精品视频| 特级毛片在线观看| 成人精品一区日本无码网站suv| 久久精品一区二区三区蜜芽的特点| 国产麻豆剧传媒精品国产AV| 九色蝌蚪9l视频蝌蚪9l视频成人熟妇| 先锋av资源网| 免费一区二区三区四区| 啪啪啪AV| 欧美XXX黑人XYX性爽| 青青色在线观看| 男女内射视频| 久久人人做| 日日搔AV一区二区三区| 黄色美女网站| 另类老妇性BBBWBBW| 国产18禁网站| 色综合天天综合网国产成人网| 北条麻妃久久| 大香焦伊人国产| 少妇人妻精品| 中文字幕操逼| 国产欧美日韩在线| 色九九视频| 囯产精品久久久久久久久久辛辛| 久久久精品| 午夜美女福利视频| 免费黄片网站在线观看| 成人小视频十八禁免费观看| 欧美日韩一区二区三区四区| 中文字幕国产视频| 五月丁香婷婷开心| 天堂AV在线免费观看| 亚洲日韩精品中文字幕| 国产美女在线观看| 免费乱伦视频| 人人操人人看人人摸| 青娱乐网站| 成人免费看AA片| 亚洲黄色av网站| 人人摸人人插| 女人的天堂AV在线观看| 韩国成人精品三级| 日皮视频免费观看| 久久亚洲影视| 亚洲无码在线视频播放| 韩国色情中文字幕| 97人人澡| www国产亚洲精品久久网站| 免费的a片| 超碰一级片| 五月天亭亭.com| 毛片网站免费| 亚洲三级无码| 77777精品成人免费A片| 无码一区二区免费| 男女免费av| 国产不卡一区| 日韩乱轮小说与视频| 国产精品成人免费视频| 成人无码在线观看免费视频| 伊人成人片| 怡红院男人天堂| 最新激情网站| 欧美成人性爱网站| 国产绿奴09-01| 18禁av在线| 91成人视频| 亚洲有码中文字幕| 亚洲成人AV在线| 翔田千里无码免费播放| 无码视频观看| 黄色网址在线观看视频| 久久久久久久久免费看无码 | 欧美大香蕉在线视频| 亚洲精品三级在线观看| 日本狠狠操| 丝袜美女足交| 亚洲无码91| 日韩一级| 无码AV动漫| 日韩综合在线| 亚洲精品伦理| 亚洲一区二区视频| 美女超碰| 久久久国产精品黄毛片| 成人无码网站在线观看| 亚洲热在线观看| 9无码| 波多野结衣成人在线| 欧美性爱a视频| 欧美亚洲日韩中文字幕| 欧美三级免费| 色呦呦一区二区三区| 五月婷婷性爱| 青娱乐欧美| A级视频网| 日韩高清无码一区二区三区| 成人无码小电影| 亚洲欧洲综合| 中文成人在线| www.黄色片| 欧美亚洲小说| 99久久精| 国产aaaaaaaaaaaaa| 三级片麻豆| 一区二区三区四区在线视频| 正在播放国产精品| 青青操青青干| 麻豆mdapp01.tⅴ| 色哟哟――国产精品| 黄色AA片| 北条麻妃青青久久| 免费毛片基地| 中文字幕VA| 狠狠干综合| 亚洲视频91| 网络自拍亚洲激情| XXXXⅩHD亚洲人HD| 国产粉嫩小泬白浆18p| 五月婷婷激情综合| 国产91黄色| 成人无码区免费A片| 另类综合激情| 婷婷99狠狠躁天天躁| 亚洲天堂一区在线观看| 国产三级无码| 日韩一区二区三区精品| 狠狠的操| 亚洲精品人人| 亚洲性爱综合| 大香蕉伊人在线观看视频| 三级日韩视频| 激情小说区| 在线成人AV| 国产又爽又黄A片免费观看| 久久婷婷六月| 18SAV| 久操人妻| 黄色片网站视频| 天堂网在线视频| 免费在线观看黄片视频| 99九九网| 亚洲高清无码视频在线| 91亚洲在线观看| 国产一级片免费观看| 妞干网国产| 高清无码三级片| 日韩熟妇视频| 长腿女神打扫偷懒被主人猛操惩罚| av岛国免费| 三级99| 影音先锋成人资源站| 欧美亚洲成人在线观看| 中文字幕一级A片免费看| 天天操人人| 日韩无码人妻系列| 91超碰在线免费观看| 精品一区二区免费| 国产成人片| 18AV在线观看| 青草在线视频| 亚洲无码福利| 国产亲子乱XXXXimim/| 蝌蚪AV| 欧美一級黃色A片免費看| 操久在线| 91视频亚洲| 亚洲a√| 亚洲另类av| A级网站| 成人做爰黄A片免费看| 色撸AⅤ| 亚洲人成无码| 北条麻妃久久久| 久青草视频| 大香蕉中文网| 亚洲A片视频| 国产一级AAAAA片免费| 高清无码第一页| 北条麻妃在线精品| 五月婷婷中文| 日本亚洲中文字幕| 亚洲国产精品久久久久婷婷老年| 欧美成人精品欧美一级私黄| 亚洲AA视频| 婷婷色色婷婷五月天| 黄片天堂| 91精品视频在线免费观看| 黄色激情五月天| 熟睡侵犯の奶水授乳在线| 好吊妞操| 97超碰碰| 射死你天天日| 在线欧美日| 一区二区三区久久久| 男女日逼网站| 日韩欧美高清无码| 日韩aaa| 国产香蕉在线观看| 日韩A毛片| 操逼网页| 天天看片天天爽| 亲子乱婬-一级A片| 亚洲在线视频观看| 国产9熟妇视频网站| 97在线免费| 91视频导航| 中文字幕操逼| 五月天福利网| wwwA片| 狠狠操在线观看| 天堂网2018| 丰臀肥逼高清视频电影播放| 内射一区| 欧美福利在线观看| 一本久久A精品一合区久久久| 99热精品国产| 99精品一区二区| 色一区二区| 91女人18片女毛片60分钟| 色欲大香蕉| 欧美啪啪视频| 尤物视频在线播放| 一区二区三区中文字幕| 91西安站街老熟女露脸| 黄色免费福利视频| 免费毛片视频| 五月开心激情网| 婷婷色五月激情| 日本精品三级| 可以在线观看的av| 亚洲第一色婷婷| 国产绿奴09-01| 久草免费在线| 日日骚影院| 成人免费Av| 免费在线观看黄色| 天天操夜夜操人人操| 中文字幕第一页av| 亚洲日韩中文字幕无码| 亚洲无码视频免费观看| 91亚洲一线产区二线产区| 毛片资源| 欧美最猛黑A片黑人猛交蜜桃视频| 中文字幕色情| 成人一级视频| 大陆一级片| 操逼视频高清无码| 狠狠色噜噜狠狠狠7777米奇网| 91视频在线看| 久久久久久亚洲AV无码专区| 欧美一级视频在线观看| 色婷在线| 电家庭影院午夜| 久草视频在线播放| 九九热精品视频在线观看| 日欧无码| 性爱91视频| 夜夜嗨AV一区二区三区啊| 人人妻人人澡| 亚洲日韩高清无码| 91内射视频| 水果派解说av| 国产三级性爱视频| 国产精品系列视频| h片在线免费观看| 华女与黑人91A∨| 男人天堂视频在线观看| 日本黄色视频网| 北条麻妃九九九精品视频免费观看| 天天视频色版免费观看视频| 91精品人妻一区二区三区| 国产精品tv| 免费黄色视频在线| 国产天堂在线观看| 国产激情精品视频| 亚洲第一中文字幕网| www在线| 日韩精品成人无码免费| 青娱乐Av| 中文字幕12页| 无码人妻丰满熟妇区17水蜜桃| 91无码一区二区三区在线| 天天干天天操天天射| 亚洲性爱网址| 蜜芽成人网| 美女靠逼视频| 精品视频免费在线| 羞羞AV| 少妇被躁到高潮无码| 成人免费毛片AAAAAA片| 欧美大屌视频| 无码日韩视频| 欧美婬乱片A片AAA毛片地址| 亚洲免费大片| 另类综合激情| 欧美日韩精品一区二区三区| 欧美日韩在线观看视频| 一级A片亲子乱| 2018最好看的中文字幕高清电影 | 亚洲人成在线观看| 婷婷无码视频| 操久| 香蕉国产2023| 亚洲一级二级三级片| 国产婬片lA片www777| 亚洲AV无码成人精品久久久 | 日韩一级| 黄色福利网站| 免费亲子乱婬一级A片| 亚洲国产精品成人久久蜜臀| 国产精品免费观看久久久久久久久 | 青娱乐国产在线| 黄色成人视频在线免费观看| 免费看成人A片无码照片88hⅤ| 亚洲AV无码精品久久一区二区 | 大黑逼AV| 黄色免费a级片一级片| 色视频在线观看| 91无码精品| 巜人妻初尝按摩师BD中字| 激情五月天色| 亚洲涩情91日韩一区二区| 成人在线免费网站| 成人久久网| 婷婷伊人中文字幕| 九九九国产| 在线观看视频免费无码免费视频| a亚洲天堂| 日韩高清一区| 色色五月天婷婷| 91人人看| a欧美| 婷婷精品免费| 欧美AAA| 黄色a片在线观看| 人妻综合网| 天天骑夜夜操| 日本综合视频| 日韩精品在线免费| 国产一级a一片成人AV| 一级黄色免费视频| 99精品国产热久久91色欲| 日本成人黄色| 国产91黄色| 亚洲不卡免费视频| 亚洲国产一区二区三区四区| 国产美女自拍| 午夜精品久久久久久久99老熟妇| 伊人大香蕉在线观看| 国产欧美日韩在线观看| 中文字幕AV无码| 日本精品无码a62v在线| 操比网| 国产精品无码ThePorn| 亚洲一级视频在线观看| 欧美成人大片| 国产又粗又猛又爽又黄91精品| 91看片看婬黄大片Videos| 免费的黄色视频在线观看| 成年人免费网站| 亚洲va欧美ⅴa在线| 亚洲另类av| 黄色录像一级带| 免费的黄色A片| 久久久精品影院| 大香蕉一级红色片青青河边草| 综合+++夜夜| 国内精品国产成人国产三级| 亚州成熟少妇视频在线观看| 日韩AV无码电影| 国产性爱av| 伊人久久大| 五月天福利视频| 岛国无码在线| 黑人无码在线| www.国产视频| 91超碰在线免费观看| 国产成人av在线| 在线无码视频播放| 99久久精品国产精品有折扣吗 | 午夜亚洲| 亚洲免费视频在线观看| 久久狠| 久久三级片| 日AV在线无| 99唉撸吧视频免费| 懂色av粉嫩AV蜜臀AV| 国产A片录制现场妹子都很多| gogogo高清在线观看免费直播中国 | 影音先锋国产| 丰滿人妻一区二区三区| 亚洲视频免费完整版在线播放| 亚洲综合视频在线观看| 久久免费视频精品| 九九热免费视频| 成人区精品一区二区婷婷| 欧美丰满少妇人妻精品| 欧美成人色图| AV麻豆| 国产成人视频在线观看| 久久婷婷视频| 久久久国产视频| 中文字幕一级A片免费看| 初学影院WWWBD英语完整版在线观看 | 亚洲免费无码视频| 色男人的天堂| 久久久成人电影| 久久人搡人人玩人妻精AV香蕉| 美日韩三级| 天天视频狠狠狠狠| 三级黄色小视频| 最美人妖系列国产Ts涵涵| 三级毛片网站| 欧美一级A片在免费看| 国产精品国产三级囯产普通话2 | 久草手机视频| 麻豆精品在线| 操b在线| 狠久久| 91精品又粗又猛又爽| 久久久久久精品国产三级| 黄色片大香蕉| 久久久国产一区二区三区| 久久久久亚洲AV成人片乱码| 伊人666| 国产成人无码精免费视频| 久久99精品国产.久久久久久| 国产青草视频| 无码人妻A片一区二区青苹果 | 婷婷五月激情网| 国产欧美在线| 一见钟情的韩国电影| 午夜亚洲AV永久无码精品蜜芽| 欧美自拍一区| 亚洲黄片在线| 中文字幕+乱码+中文乱码91在线观看 | 成人做爰100片免费观看视频 | 日韩美女毛片| 九九热精品视频99| 成人性爱视频免费在线观看| 中文字幕永久在线视频| 蜜桃传媒一区二区亚洲A| 97久久一区二区| 激情五月天在线观看| 人妻无码久久| 日韩黄色一级视频| 国产人人操| 在线观看av网站中文字幕| 亚洲国产成人va| 97精产国品久久蜜桃臀| 东京热日韩无码| 97精品一区二区三区A片| 亚洲精品中文字幕乱码三区91| 久久成人导航| 婷婷五月天综合网| 嫩BBB槡BBBB槡BBBB撒尿-百度| 91精品综合久久久久久五月丁香| 在线观看黄a| xxxx亚洲| 91嫖妓站街按店老熟女| H片免费在线观看| 蜜桃久久久亚洲精品| 香蕉视频在线看| 国产熟妇婬乱一区二区| 亚洲综合在线视频| 91人妻无码视频| 围内精品久久久久久久久白丝制服| 亚洲色图1| 国产免费av片| 国产婷婷色一区二区三区| 水蜜桃一曲二区| 人人摸人人草| 国产盗摄AV| 日韩中文无码电影| 青青草原成人在线视频| 国产精品无码专区AV免费播放| 色色毛片| 色五月激情五月| 亚洲国产高清在线观看视频| 日韩av一级| 嫩BBB搡BBBB搡BBBB-百度| 国产欧美黄片| 亚洲一级AV| 国产乱轮视频| 新亚洲天堂男子Av-| 亚洲国产av一区| 亚洲天堂一区在线观看| 色色五月天视频| 婷婷色在线播放| 中文字幕网站| 2015中文字幕黄色视频| 亚洲性爱大全| 高清无码免费观看视频| 男女做爱网站| 狠狠干大香蕉| 黄片在线视频| 国产一精品| 蜜臂AV| 搡老熟女-91Porn| 亚洲av男人天堂| 91乱子伦国产乱子伦| 亚洲免费MV| 港澳日韩黄片| 91精彩视频在线观看| 日韩日日日| 国内自拍视频在线观看| 婷婷五月天激情俺来也| 亚洲成人在线一区| 色婷婷国产精品视频| 这里只有精品在线观看| 四虎成人网站| 免费高清无码| 色色在线观看| 国产熟妇码视频app| 第四色激情网| 日本一区二区不卡| 成人做爰100片免费-百度| 欧美a片在线看| 性爱视频小说| 日韩a视频| 欧美爱爱网| 69av视频在线观看| 亚洲AV秘无码不卡在线观看| 九色PORN视频成人蝌蚪自拍| 一区二区三区高清无码| 日韩黄片| 亚洲美女视频网| 精品一区二区三区四区五区六区| 2025天天操| 日韩无码视频一区| 中国少妇xxx| 日本午夜无码| 日本高清无码视频| www.99| TokyoKot大交乱无码| 人妻黑人一区二区三区| 四虎成人精品无码永久在线的客服 | 乱伦无码高清麻豆视频一区二区| 91综合在线观看| 骚逼综合网| 成人黄网免费观看视频| 国产AV资源| 久操久操久操| 成人网址大全| 美女综合网| 中文爱爱视频| 国产黄色Av| 开心五月激情婷婷| www.97色色| 西西4444www无码精品| 91无码精品国产AⅤ| 青青草免费观看视频| 成人性爱在线观看| 国产麻豆精品ThePorn| 国产成人亚洲精品| 天天草天天| 黄色A级片| 在线观看AⅤ| 天天射天天操天天干| 国产三级91| 亚洲AV无码第一区二区三区蜜桃| 亚洲成人影音先锋| 日本狠狠操| 日韩人妻无码专区| 欧美A片免费观看| 亚洲精品伦理| 国产AV黄色| 四虎2025在线51| 草久伊人| 亚洲秘无码一区二区三区蜜桃中文| 亚洲在线视频观看| 色吊妞| 亚洲欧美影院| 中韩无码| 99精品视频北条麻妃国产版| 亚洲AV成人一区二区三区不卡 | 激情五月婷婷综合| 精品国产一区二区三区久久久蜜月 | 北条麻妃精品在线| 天天干天天看| 你懂的久久| 亚洲天堂网在线观看视频| 亚洲三级视频在线观看| 欧美footjob高跟脚交| 97资源在线视频| 91免费在线看| 黄色激情网站| 99热这里只有精品999| 91九色首页| 大香蕉av在线| 欧美在线A片| 91久久爱| 四虎永久www成人影院| 爱搞搞就要爱搞搞| 夜操| 中文字幕AV在线播放| 色97| av青青草| 在线观看A片| 天堂网中文字幕| 国产美女av| 欧美性爱精品一区| 日韩欧美人妻无码精品| 黄色视频网站国产| 蜜桃一区二区中午字幕| 中文字幕av网| 操网站| 91免费观看国产| 五月天婷婷黄色| 青青草原在线| 日韩大黄| 亚洲视频无码在线| 加勒比色综合| 爱爱免费视频| 亚州操逼片| 在线不卡视频| 大地资源第5页在线| 日本无码免费视频| 丰臀肥逼高清视频电影播放| 成人综合在线观看| 欧美拍拍视频| 天堂v在线观看| 蝌蚪窝免费视频| 神马午夜51| 亚洲免费视频在线看| www.午夜| 日韩女人性爱| 免费日比视频| 一本色道久久综合亚洲精品久久| 中文字幕在线播放AV| av无码免费| 久草人妻| av天堂资源在线| 7777影视电视剧在线观看官网| 99精品视频播放| 欧美性猛交XXXX乱大交HD| 久久爆乳一区二区三区| 高清无码一区二区在线| 国产精品久久无码| 99热免费| 91久久精品日日躁夜夜躁欧美 | 国产盗摄AV| 亚洲日本中文| 无码高清在线播放| 视频一区中文字幕| 国产色情网站| 尤物视频网站在线观看| 综合婷婷久久| 蜜桃91精品秘入口| 猛男大粗猛爽H男人味| 日本精品码喷水在线看| 欧美日韩国产三级| 青娱乐伊人| 亚洲第一狼人综合网|