3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CString Management (关于CString的所有操作)

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CString Management (关于CString的所有操作) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CString Management (關于CString的所有操作)
作者:FreeEIM
CStrings are a useful data type. They greatly simplify a lot of operations in MFC, making it much more convenient to do string manipulation. However, there are some special techniques to using CStrings, particularly hard for people coming from a pure-C background to learn. This essay discusses some of these techniques.

Much of what you need to do is pretty straightforward. This is not a complete tutorial on CStrings, but captures the most common basic questions.

CString concatenation
Formatting (including integer-to-CString)
Converting CStrings to integers?
Converting between char * to a CString?
???? char * to CString
???? CString to char * I: Casting to LPCTSTR
???? CString to char * II: Using GetBuffer
???? CString to char * III: Interfacing to a control
CString to BSTR??
BSTR to CString? (30-Jan-01)
VARIANT to CString?? (24-Feb-01)
Loading STRINGTABLE resources? (22-Feb-01)
CStrings and temporary objects??
CString efficiency
String ConcatenationOne of the very convenient features of CString is the ability to concatenate two strings. For example if we have

CString gray("Gray");
CString cat("Cat");
CString graycat = gray + cat;
is a lot nicer than having to do something like:

char gray[] = "Gray";
char cat[] = "Cat";
char * graycat = malloc(strlen(gray) + strlen(cat) + 1);
strcpy(graycat, gray);
strcat(graycat, cat);
Formatting (including integer-to-CString)
Rather than using sprintf or wsprintf, you can do formatting for a CString by using the Format method:

CString s;
s.Format(_T("The total is %d"), total);
The advantage here is that you don't have to worry about whether or not the buffer is large enough to hold the formatted data; this is handled for you by the formatting routines.

Use of formatting is the most common way of converting from non-string data types to a CString, for example, converting an integer to a CString:

CString s;
s.Format(_T("%d"), total);
I always use the _T( ) macro because I design my programs to be at least Unicode-aware, but that's a topic for some other essay. The purpose of _T( ) is to compile a string for an 8-bit-character application as:

#define _T(x) x // non-Unicode version
whereas for a Unicode application it is defined as

#define _T(x) L##x // Unicode version
so in Unicode the effect is as if I had written

s.Format(L"%d", total);
If you ever think you might ever possibly use Unicode, start coding in a Unicode-aware fashion. For example, never, ever use sizeof( ) to get the size of a character buffer, because it will be off by a factor of 2 in a Unicode application. We cover Unicode in some detail in Win32 Programming. When I need a size, I have a macro called DIM, which is defined in a file dim.h that I include everywhere:

#define DIM(x) ( sizeof((x)) / sizeof((x)[0]) )
This is not only useful for dealing with Unicode buffers whose size is fixed at compile time, but any compile-time defined table.

class Whatever { ... };
Whatever data[] = {
?? { ... },
??? ...
?? { ... },
};

for(int i = 0; i < DIM(data); i++) // scan the table looking for a match
Beware of those API calls that want genuine byte counts; using a character count will not work.

TCHAR data[20];
lstrcpyn(data, longstring, sizeof(data) - 1); // WRONG!
lstrcpyn(data, longstring, DIM(data) - 1); // RIGHT
WriteFile(f, data, DIM(data), &bytesWritten, NULL); // WRONG!
WriteFile(f, data, sizeof(data), &bytesWritten, NULL); // RIGHT
This is because lstrcpyn wants a character count, but WriteFile wants a byte count. Also note that this always writes out the entire contents of data. If you only want to write out the actual length of the data, you would think you might do

WriteFile(f, data, lstrlen(data), &bytesWritten, NULL); // WRONG
but that will not work in a Unicode application. Instead, you must do

WriteFile(f, data, lstrlen(data) * sizeof(TCHAR), &bytesWritten, NULL); // RIGHT
because WriteFile wants a byte count. (For those of you who might be tempted to say "but that means I'll always be multiplying by 1 for ordinary applications, and that is inefficient", you need to understand what compilers actually do. No real C or C++ compiler would actually compile a multiply instruction inline; the multiply-by-one is simply discarded by the compiler as being a silly thing to do. And if you think when you use Unicode that you'll have to pay the cost of multiplying by 2, remember that this is just a bit-shift left by 1 bit, which the compiler is also happy to do instead of the multiplication).

Using _T does not create a Unicode application. It creates a Unicode-aware application. When you compile in the default 8-bit mode, you get a "normal" 8-bit program; when you compile in Unicode mode, you get a Unicode (16-bit-character) application. Note that a CString in a Unicode application is a string that holds 16-bit characters.

Converting a CString to an integerThe simplest way to convert a CString to an integer value is to use one of the standard string-to-integer conversion routines.

While generally you will suspect that _atoi is a good choice, it is rarely the right choice. If you play to be Unicode-ready, you should call the function _ttoi, which compiles into _atoi in ANSI code and _wtoi in Unicode code. You can also consider using _tcstoul (for unsigned conversion to any radix, such as 2, 8, 10 or 16) or _tcstol (for signed conversion to any radix). For example, here are some examples:

CString hex = _T("FAB");
CString decimal = _T("4011");
ASSERT(_tcstoul(hex, 0, 16) == _ttoi(decimal));
Converting between char * and CStringThis is the most common set of questions beginners have on the CString data type. Due largely to serious C++ magic, you can largely ignore many of the problems. Things just "work right". The problems come about when you don't understand the basic mechanisms and then don't understand why something that seems obvious doesn't work.

For example, having noticed the above example you might wonder why you can't write

CString graycat = "Gray" + "Cat";
or

CString graycat("Gray" + "Cat");
In fact the compiler will complain bitterly about these attempts. Why? Because the + operator is defined as an overloaded operator on various combinations of the CString and LPCTSTR data types, but not between two LPCTSTR data types, which are underlying data types. You can't overload C++ operators on base types like int and char, or char *. What will work is

CString graycat = CString("Gray") + CString("Cat");
or even

CString graycat = CString("Gray") + "Cat";
If you study these, you will see that the + always applies to at least one CString and one LPCSTR.

char * to CStringSo you have a char *, or a string. How do you create a CString. Here are some examples:

char * p = "This is a test"
or, in Unicode-aware applications

TCHAR * p = _T("This is a test")
or

LPTSTR p = _T("This is a test");
you can write any of the following:

CString s = "This is a test";???? // 8-bit only
CString s = _T("This is a test"); // Unicode-aware
CString s("This is a test");????? // 8-bit only
CSTring s(_T("This is a test");?? // Unicode-aware
CString s = p;
CString s(p);
Any of these readily convert the constant string or the pointer to a CString value. Note that the characters assigned are always copied into the CString so that you can do something like

TCHAR * p = _T("Gray");
CString s(p);
p = _T("Cat");
s += p;
and be sure that the resulting string is "GrayCat".

There are several other methods for CString constructors, but we will not consider most of these here; you can read about them on your own.

CString to char * I: Casting to LPCTSTRThis is a slightly harder transition to find out about, and there is lots of confusion about the "right" way to do it. There are quite a few right ways, and probably an equal number of wrong ways.

The first thing you have to understand about a CString is that it is a special C++ object which contains three values: a pointer to a buffer, a count of the valid characters in the buffer, and a buffer length. The count of the number of characters can be any size from 0 up to the maximum length of the buffer minus one (for the NUL byte). The character count and buffer length are cleverly hidden.

Unless you do some special things, you know nothing about the size of the buffer that is associated with the CString. Therefore, if you can get the address of the buffer, you cannot change its contents. You cannot shorten the contents, and you absolutely must not lengthen the contents. This leads to some at-first-glance odd workarounds.

The operator LPCTSTR (or more specifically, the operator const TCHAR *), is overloaded for CString. The definition of the operator is to return the address of the buffer. Thus, if you need a string pointer to the CString you can do something like

CString s("GrayCat");
LPCTSTR p =? s;
and it works correctly. This is because of the rules about how casting is done in C; when a cast is required, C++ rules allow the cast to be selected. For example, you could define (float) as a cast on a complex number (a pair of floats) and define it to return only the first float (called the "real part") of the complex number so you could say

Complex c(1.2f, 4.8f);
float realpart = c;
and expect to see, if the (float) operator is defined properly, that the value of realpart is now 1.2.

This works for you in all kinds of places. For example, any function that takes an LPCTSTR parameter will force this coercion, so that you can have a function (perhaps in a DLL you bought):

BOOL DoSomethingCool(LPCTSTR s);
and call it as follows

CString file("c://myfiles//coolstuff")
BOOL result = DoSomethingCool(file);
This works correctly because the DoSomethingCool function has specified that it wants an LPCTSTR and therefore the LPCTSTR operator is applied to the argument, which in MFC means that the address of the string is returned.

But what if you want to format it?

CString graycat("GrayCat");
CString s;
s.Format("Mew! I love %s", graycat);
Note that because the value appears in the variable-argument list (the list designated by "..." in the specification of the function) that there is no implicit coercion operator. What are you going to get?

Well, surprise, you actually get the string

"Mew! I love GrayCat"
because the MFC implementers carefully designed the CString data type so that an expression of type CString evaluates to the pointer to the string, so in the absence of any casting, such as in a Format or sprintf, you will still get the correct behavior. The additional data that describes a CString actually lives in the addresses below the nominal CString address.

What you can't do is modify the string. For example, you might try to do something like replace the "." by a "," (don't do it this way, you should use the National Language Support features for decimal conversions if you care about internationalization, but this makes a simple example):

CString v("1.00");? // currency amount, 2 decimal places
LPCTSTR p = v;
p[lstrlen(p) - 3] = ',';
If you try to do this, the compiler will complain that you are assigning to a constant string. This is the correct message. It would also complain if you tried

strcat(p, "each");
because strcat wants an LPTSTR as its first argument and you gave it an LPCTSTR.

Don't try to defeat these error messages. You will get yourself into trouble!

The reason is that the buffer has a count, which is inaccessible to you (it's in that hidden area that sits below the CString address), and if you change the string, you won't see the change reflected in the character count for the buffer. Furthermore, if the string happens to be just about as long as the buffer physical limit (more on this later), an attempt to extend the string will overwrite whatever is beyond the buffer, which is memory you have no right to write (right?) and you'll damage memory you don't own. Sure recipe for a dead application.

CString to char * II: Using GetBufferA special method is available for a CString if you need to modify it. This is the operation GetBuffer. What this does is return to you a pointer to the buffer which is considered writeable. If you are only going to change characters or shorten the string, you are now free to do so:

CString s(_T("File.ext"));
LPTSTR p = s.GetBuffer();
LPTSTR dot = strchr(p, '.'); // OK, should have used s.Find...
if(p != NULL)
??? *p = _T('/0');
s.ReleaseBuffer();
This is the first and simplest use of GetBuffer. You don't supply an argument, so the default of 0 is used, which means "give me a pointer to the string; I promise to not extend the string". When you call ReleaseBuffer, the actual length of the string is recomputed and stored in the CString. Within the scope of a GetBuffer/ReleaseBuffer sequene, and I emphasize this: You Must Not, Ever, Use Any Method Of CString on the CString whose buffer you have! The reason for this is that the integrity of the CString object is not guaranteed until the ReleaseBuffer is called. Study the code below:

CString s(...);
LPTSTR p = s.GetBuffer();
//... lots of things happen via the pointer p
int n = s.GetLength(); // BAD!!!!! PROBABLY WILL GIVE WRONG ANSWER!!!
s.TrimRight();???????? // BAD!!!!! NO GUARANTEE IT WILL WORK!!!!
s.ReleaseBuffer();???? // Things are now OK
int m = s.GetLength(); // This is guaranteed to be correct
s.TrimRight();???????? // Will work correctly
Suppose you want to actually extend the string. In this case you must know how large the string will get. This is just like declaring

char buffer[1024];
knowing that 1024 is more than enough space for anything you are going to do. The equivalent in the CString world is

LPTSTR p = s.GetBuffer(1024);
This call gives you not only a pointer to the buffer, but guarantees that the buffer will be (at least) 1024 bytes in length.

Also, note that if you have a pointer to a const string, the string value itself is stored in read-only memory; an attempt to store into it, even if you've done GetBuffer, you have a pointer to read-only memory, so an attempt to store into the string will fail with an access error. I haven't verified this for CString, but I've seen ordinary C programmers make this error frequently.

A common "bad idiom" left over from C programmers is to allocate a buffer of fixed size, do a sprintf into it, and assign it to a CString:

char buffer[256];
sprintf(buffer, "%......", args, ...); // ... means "lots of stuff here"
CString s = buffer;
while the better form is to do

CString s;
s.Format(_T("%....", args, ...);
Note that this always works; if your string happens to end up longer than 256 bytes you don't clobber the stack!

Another common error is to be clever and realize that a fixed size won't work, so the programmer allocates bytes dynamically. This is even sillier:

int len = lstrlen(parm1) + 13 + lstrlen(parm2) + 10 + 100;
char * buffer = new char[len];
sprintf(buffer, "%s is equal to %s, valid data", parm1, parm2);
CString s = buffer;
....
delete [] buffer;
Where it can be easily written as

CString s;
s.Format(_T("%s is equal to %s, valid data"), parm1, parm2);
Note that the sprintf examples are not Unicode-ready (although you could use tsprintf and put _T() around the formatting string, but the basic idea is still that you are doing far more work than is necessary, and it is error-prone.

CString to char * III: Interfacing to a controlA very common operation is to pass a CString value in to a control, for example, a CTreeCtrl. While MFC provides a number of convenient overloads for the operation, but in the most general situation you use the "raw" form of the update, and therefore you need to store a pointer to a string in the TVITEM which is included within the TVINSERTITEMSTRUCT:

TVINSERTITEMSTRUCT tvi;
CString s;
// ... assign something to s
tvi.item.pszText = s; // Compiler yells at you here
// ... other stuff
HTREEITEM ti = c_MyTree.InsertItem(&tvi);
Now why did the compiler complain? It looks like a perfectly good assignment! But in fact if you look at the structure, you will see that the member is declared in the TVITEM structure as shown below:

LPTSTR pszText;
int cchTextMax;
Therefore, the assignment is not assigning to an LPCTSTR and the compiler has no idea how to cast the right hand side of the assignment to an LPTSTR.

OK, you say, I can deal with that, and you write

tvi.item.pszText = (LPCTSTR)s; // compiler still complains!
What the compiler is now complaining about is that you are attempting to assign an LPCTSTR to an LPTSTR, an operation which is forbidden by the rules of C and C++. You may not use this technique to accidentally alias a constant pointer to a non-constant alias so you can violate the assumptions of constancy. If you could, you could potentially confuse the optimizer, which trusts what you tell it when deciding how to optimize your program. For example, if you do

const int i = ...;
//... do lots of stuff
???? ... = a[i];? // usage 1
// ... lots more stuff
???? ... = a[i];? // usage 2
Then the compiler can trust that, because you said const, that the value of i at "usage1" and "usage2" is the same value, and it can even precompute the address of a[i] at usage1 and keep the value around for later use at usage2, rather than computing it each time. If you were able to write

const int i = ...;
int * p = &i;
//... do lots of stuff
???? ... = a[i];? // usage 1
// ... lots more stuff
???? (*p)++;????? // mess over compiler's assumption
// ... and other stuff
???? ... = a[i];? // usage 2
The the compiler would believe in the constancy of i, and consequently the constancy of the location of a[i], and the place where the indirection is done destroys that assumption. Thus, the program would exhibit one behavior when compiled in debug mode (no optimizations) and another behavior when compiled in release mode (full optimization). This Is Not Good. Therefore, the attempt to assign the pointer to i to a modifiable reference is diagnosed by the compiler as being bogus. This is why the (LPCTSTR) cast won't really help.

Why not just declare the member as an LPCTSTR? Because the structure is used both for reading and writing to the control. When you are writing to the control, the text pointer is actually treated as an LPCTSTR but when you are reading from the control you need a writeable string. The structure cannot distinguish its use for input from its use for output.

Therefore, you will often find in my code something that looks like

tvi.item.pszText = (LPTSTR)(LPCTSTR)s;
This casts the CString to an LPCTSTR, thus giving me that address of the string, which I then force to be an LPTSTR so I can assign it. Note that this is valid only if you are using the value as data to a Set or Insert style method! You cannot do this when you are trying to retrieve data!

You need a slightly different method when you are trying to retrieve data, such as the value stored in a control. For example, for a CTreeCtrl using the GetItem method. Here, I want to get the text of the item. I know that the text is no more than MY_LIMIT in size. Therefore, I can write something like

TVITEM tvi;
// ... assorted initialization of other fields of tvi
tvi.pszText = s.GetBuffer(MY_LIMIT);
tvi.cchTextMax = MY_LIMIT;
c_MyTree.GetItem(&tvi);
s.ReleaseBuffer();
Note that the code above works for any type of Set method also, but is not needed because for a Set-type method (including Insert) you are not writing the string. But when you are writing the CString you need to make sure the buffer is writeable. That's what the GetBuffer does. Again, note that once you have done the GetBuffer call, you must not do anything else to the CString until the ReleaseBuffer call.

CString to BSTR?
When programming with ActiveX, you will sometimes need a value represented as a type BSTR. A BSTR is a counted string, a wide-character (Unicode) string on Intel platforms and can contain embedded NUL characters.?

You can convert at CString to a BSTR by calling the CString method AllocSysString:

CString s;
s = ... ; // whatever
BSTR b = s.AllocSysString();
?The pointer b points to a newly-allocated BSTR object which is a copy of the CString, including the terminal NUL character. This may now be passed to whatever interface you are calling that requires a BSTR. Normally, a BSTR is disposed of by the component receiving it. If you should need to dispose of a BSTR, you must use the call

::SysFreeString(b);
to free the string.

The story is that the decision of how to represent strings sent to ActiveX controls resulted in some serious turf wars within Microsoft. The Visual Basic people won, and the string type BSTR (acronym for "Basic String") was the result.

BSTR to CString?
?Since a BSTR is a counted Unicode string, you can use standard conversions to make an 8-bit CString. Actually, this is built-in; there are special constructors for converting ANSI strings to Unicode and vice-versa. You can also get BSTRs as results in a VARIANT type, which is a type returned by various COM and Automation calls.

For example, if you do, in an ANSI application,

BSTR b;
b = ...; // whatever
CString s(b == NULL ? L"" : b)
works just fine for a single-string BSTR, because there is a special constructor that takes an LPCWSTR (which is what a BSTR is) and converts it to an ANSI string. The special test is required because a BSTR could be NULL, and the constructors Don't Play Well with NULL inputs (thanks to Brian Ross for pointing this out!). This also only works for a BSTR that contains only a single string terminated with a NUL; you have to do more work to convert strings that contain multiple NUL characters. Note that embedded NUL characters generally don't work well in CStrings and generally should be avoided.

Remember, according to the rules of C/C++, if you have an LPWSTR it will match a parameter type of LPCWSTR (it doesn't work the other way!).

In UNICODE mode, this is just the constructor

CString::CString(LPCTSTR);
As indicated above, in ANSI mode there is a special constructor for

CString::CString(LPCWSTR);
this calls an internal function to convert the Unicode string to an ANSI string. (In Unicode mode there is a special constructor that takes an LPCSTR, a pointer to an 8-bit ANSI string, and widens it to a Unicode string!). Again, note the limitation imposed by the need to test for a BSTR value which is NULL.

There is an additional problem as pointed out above: BSTRs can contain embedded NUL characters; CString constructors can only handle single NUL characters in a string. This means that CStrings will compute the wrong length for a string which contains embedded NUL bytes. You need to handle this yourself. If you look at the constructors in strcore.cpp, you will see that they all do an lstrlen or equivalent to compute the length.?

Note that the conversion from Unicode to ANSI uses the ::WideCharToMultiByte conversion with specific arguments that you may not like. If you want a different conversion than the default, you have to write your own.

If you are compiling as UNICODE, then it is a simple assignment:

CString convert(BSTR b)
?? {
??? if(b == NULL)
??????? return CString(_T(""));
??? CString s(b); // in UNICODE mode
??? return s;
?? }
If you are in ANSI mode, you need to convert the string in a more complex fashion. This will accomplish it. Note that this code uses the same argument values to ::WideCharToMultiByte that the implicit constructor for CString uses, so you would use this technique only if you wanted to change these parameters to do the conversion in some other fashion, for example, specifying a different default character, a different set of flags, etc.

CString convert(BSTR b)
?? {
??? CString s;
??? if(b == NULL)
?????? return s; // empty for NULL BSTR
#ifdef UNICODE
??? s = b;
#else
??? LPSTR p = s.GetBuffer(SysStringLen(b) + 1);
??? ::WideCharToMultiByte(CP_ACP,??????????? // ANSI Code Page
????????????????????????? 0,???????????????? // no flags
????????????????????????? b,???????????????? // source widechar string
????????????????????????? -1,??????????????? // assume NUL-terminated
????????????????????????? p,???????????????? // target buffer
????????????????????????? SysStringLen(b)+1, // target buffer length
????????????????????????? NULL,????????????? // use system default char
????????????????????????? NULL);???????????? // don't care if default used
??? s.ReleaseBuffer();
#endif
??? return s;
?? }
Note that I do not worry about what happens if the BSTR contains Unicode characters that do not map to the 8-bit character set, because I specify NULL as the last two parameters. This is the sort of thing you might want to change.

VARIANT to CString?
Actually, I've never done this; I don't work in COM/OLE/ActiveX where this is an issue. But I saw a posting by Robert Quirk on the microsoft.public.vc.mfc newsgroup on how to do this, and it seemed silly not to include it in this essay, so here it is, with a bit more explanation and elaboration. Any errors relative to what he wrote are my fault.

A VARIANT is a generic parameter/return type in COM programming. You can write methods that return a type VARIANT, and which type the function returns may (and often does) depend on the input parameters to your method (for example, in Automation, depending on which method you call, IDispatch::Invoke may return (via one of its parameters) a VARIANT which holds a BYTE, a WORD, an float, a double, a date, a BSTR, and about three dozen other types (see the specifications of the VARIANT structure in the MSDN). In the example below, it is assumed that the type is known to be a variant of type BSTR, which means that the value is found in the string referenced by bstrVal.? This takes advantage of the fact that there is a constructor which, in an ANSI application, will convert a value referenced by an LPCWCHAR to a CString (see BSTR-to-CString). In Unicode mode, this turns out to be the normal CString constructor. See the caveats about the default ::WideCharToMultibyte conversion and whether or not you find these acceptable (mostly, you will).

VARIANT vaData;

vaData = m_com.YourMethodHere();
ASSERT(vaData.vt == VT_BSTR);

CString strData(vaData.bstrVal);
Note that you could also make a more generic conversion routine that looked at the vt field. In this case, you might consider something like:

CString VariantToString(VARIANT * va)
?? {
??? CString s;
??? switch(va->vt)
????? { /* vt */
?????? case VT_BSTR:
????????? return CString(vaData->bstrVal);
?????? case VT_BSTR | VT_BYREF:
????????? return CString(*vaData->pbstrVal);
?????? case VT_I4:
????????? s.Format(_T("%d"), va->lVal);
????????? return s;
?????? case VT_I4 | VT_BYREF:
????????? s.Format(_T("%d"), *va->plVal);
?????? case VT_R8:
????????? s.Format(_T("%f"), va->dblVal);
????????? return s;
?????? ... remaining cases left as an Exercise For The Reader
?????? default:
????????? ASSERT(FALSE); // unknown VARIANT type (this ASSERT is optional)
????????? return CString("");
????? } /* vt */
?? }
Loading STRINGTABLE values
If you want to create a program that is easily ported to other languages, you must not include native-language strings in your source code. (For these examples, I'll use English, since that is my native language (aber Ich kann ein bischen Deutsch sprechen). So it is very bad practice to write

CString s = "There is an error";
Instead, you should put all your language-specific strings (except, perhaps, debug strings, which are never in a product deliverable). This means that is fine to write

s.Format(_T("%d - %s"), code, text);
in your program; that literal string is not language-sensitive. However, you must be very careful to not use strings like

// fmt is "Error in %s file %s"
// readorwrite is "reading" or "writing"
s.Format(fmt, readorwrite, filename);
I speak of this from experience. In my first internationalized application I made this error, and in spite of the fact that I know German, and that German word order places the verb at the end of a sentence, I had done this. Our German distributor complained bitterly that he had to come up with truly weird error messages in German to get the format codes to do the right thing. It is much better (and what I do now) to have two strings, one for reading and one for writing, and load the appropriate one, making them string parameter-insensitive, that is, instead of loading the strings "reading" or "writing", load the whole format:

// fmt is "Error in reading file %s"
//????????? "Error in writing file %s"
s.Format(fmt, filename);
Note that if you have more than one substitution, you should make sure that if the word order of the substitutions does not matter, for example, subject-object, subject-verb, or verb-object, in English.

For now, I won't talk about FormatMessage, which actually is better than sprintf/Format, but is poorly integrated into the CString class. It solves this by naming the parameters by their position in the parameter list and allows you to rearrange them in the output string.?

So how do we accomplish all this? By storing the string values in the resource known as the STRINGTABLE in the resource segment. To do this, you must first create the string, using the Visual Studio resource editor. A string is given a string ID, typically starting IDS_. So you have a message, you create the string and call it IDS_READING_FILE and another called IDS_WRITING_FILE. They appear in your .rc file as

STRINGTABLE
??? IDS_READING_FILE "Reading file %s"
??? IDS_WRITING_FILE "Writing file %s"
END
Note: these resources are always stored as Unicode strings, no matter what your program is compiled as. They are even Unicode strings on Win9x platforms, which otherwise have no real grasp of Unicode (but they do for resources!). Then you go to where you had stored the strings?

// previous code
?? CString fmt;
????? if(...)
??????? fmt = "Reading file %s";
???? else
?????? fmt = "Writing file %s";
? ...
??? // much later
? CString s;
? s.Format(fmt, filename);
and instead do

// revised code
??? CString fmt;
??????? if(...)
?????????? fmt.LoadString(IDS_READING_FILE);
??????? else
?????????? fmt.LoadString(DS_WRITING_FILE);
??? ...
????? // much later
??? CString s;
??? s.Format(fmt, filename);
Now your code can be moved to any language. The LoadString method takes a string ID and retrieves the STRINGTABLE? value it represents, and assigns that value to the CString.?

There is a clever feature of the CString constructor that simplifies the use of STRINGTABLE entries. It is not explicitly documented in the CString::CString specification, but is obscurely shown in the example usage of the constructor! (Why this couldn't be part of the formal documentation and has to be shown in an example escapes me!). The feature is that if you cast a STRINGTABLE ID to an LPCTSTR it will implicitly do a LoadString. Thus the following two examples of creating a string value produce the same effect, and the ASSERT will not trigger in debug mode compilations:

CString s;
s.LoadString(IDS_WHATEVER);
CString t( (LPCTSTR)IDS_WHATEVER);
ASSERT(s == t);
Now, you may say, how can this possibly work? How can it tell a valid pointer from a STRINGTABLE ID? Simple: all string IDs are in the range 1..65535. This means that the high-order bits of the pointer will be 0. Sounds good, but what if I have valid data in a low address? Well, the answer is, you can't. The lower 64K of your address space will never, ever, exist. Any attempt to access a value in the address range 0x00000000 through 0x0000FFFF (0..65535) will always and forever give an access fault. These addresses are never, ever valid addresses. Thus a value in that range (other than 0) must necessarily represent a STRINGTABLE ID.

I tend to use the MAKEINTRESOURCE macro to do the casting. I think it makes the code clearer regarding what is going on. It is a standard macro which doesn't have much applicability otherwise in MFC. You may have noted that many methods take either a UINT or an LPCTSTR as parameters, using C++ overloading. This gets us around the ugliness of pure C where the "overloaded" methods (which aren't really overloaded in C) required explicit casts. This is also useful in assigning resource names to various other structures.

CString s;
s.LoadString(IDS_WHATEVER);
CString t( MAKEINTRESOURCE(IDS_WHATEVER));
ASSERT(s == t);
Just to give you an idea: I practice what I preach here. You will rarely if ever find a literal string in my program, other than the occasional debug output messages, and, of course, any language-independent string.

CStrings and temporary objects??
Here's a little problem that came up on the microsoft.public.vc.mfc newsgroup a while ago. I'll simplify it a bit. The basic problem was the programmer wanted to write a string to the Registry. So he wrote:

I am trying to set a registry value using RegSetValueEx() and it is the value that I am having trouble with. If I declare a variable of char[] it works fine. However, I am trying to convert from a CString and I get garbage. "YYYY...YYYYYY" to be exact. I have tried GetBuffer, typecasting to char*, LPCSTR. The return of GetBuffer (from debug) is the correct string but when I assign it to a char* (or LPCSTR) it is garbage. Following is a piece of my code:

char* szName = GetName().GetBuffer(20);
RegSetValueEx(hKey, "Name", 0, REG_SZ,
??????????????????? (CONST BYTE *) szName,
??????????????????? strlen (szName + 1));

The Name string is less then 20 chars long, so I don't think the GetBuffer parameter is to blame.

It is very frustrating and any help is appreciated.

Dear Frustrated,

You have been done in by a fairly subtle error, caused by trying to be a bit too clever. What happened was that you fell victim to knowing too much. The correct code is shown below:

CString Name = GetName();
RegSetValueEx(hKey, _T("Name"), 0, REG_SZ,
??????????????????? (CONST BYTE *) (LPCTSTR)Name,
??????????????????? (Name.GetLength() + 1) * sizeof(TCHAR));

Here's why my code works and yours didn't. When your function GetName returned a CString, it returned a "temporary object". See the C++ Reference manual §12.2.?

In some circumstances it may be necessary or convenient for the compiler to generate a temporary object. Such introduction of temporaries is implementation dependent. When a compiler introduces a temporary object of a class that has a constructor it must ensure that a construct is called for the temporary object. Similarly, the destructor must be called for a temporary object of a class where a destructor is declared.?

The compiler must ensure that a temporary object is destroyed. The exact point of destruction is implementation dependent....This destruction must take place before exit from the scope in which the temporary is created.

Most compilers implement the implicit destructor for a temporary at the next program sequencing point following its creation, that is, for all practical purposes, the next semicolon. Hence the CString existed when the GetBuffer call was made, but was destroyed following the semicolon. (As an aside, there was no reason to provide an argument to GetBuffer, and the code as written is incorrect since there is no ReleaseBuffer performed). So what GetBuffer returned was a pointer to storage for the text of the CString. When the destructor was called at the semicolon, the basic CString object was freed, along with the storage that had been allocated to it. The MFC debug storage allocator then rewrites this freed storage with 0xDD, which is the symbol "Y". By the time you do the write to the Registry, the string contents have been destroyed.

There is no particular reason to need to cast the result to a char * immediately. Storing it as a CString means that a copy of the result is made, so after the temporary CString is destroyed, the string still exists in the variable's CString. The casting at the time of the Registry call is sufficient to get the value of a string which already exists.

In addition, my code is Unicode-ready. The Registry call wants a byte count. Note also that the call lstrlen(Name+1) returns a value that is too small by 2 for an ANSI string, since it doesn't start until the second character of the string. What you meant to write was lstrlen(Name) + 1 (OK, I admit it, I've made the same error!). However, in Unicode, where all characters are two bytes long, we need to cope with this. The Microsoft documentation is surprisingly silent on this point: is the value given for REG_SZ values a byte count or a character count? I'm assuming that their specification of "byte count" means exactly that, and you have to compensate.

CString Efficiency
One problem of CString is that it hides certain inefficiencies from you. On the other hand, it also means that it can implement certain efficiencies. You may be tempted to say of the following code

CString s = SomeCString1;
s += SomeCString2;
s += SomeCString3;
s += ",";
s += SomeCString4;
that it is horribly inefficient compared to, say

char s[1024];
lstrcpy(s, SomeString1);
lstrcat(s, SomeString2);
lstrcat(s, SomeString 3);
lstrcat(s, ",");
lstrcat(s, SomeString4);
After all, you might think, first it allocates a buffer to hold SomeCString1, then copies SomeCString1 to it, then detects it is doing a concatenate, allocates a new buffer large enough to hold the current string plus SomeCString2, copies the contents to the buffer and concatenates the SomeCString2 to it, then discards the first buffer and replaces the pointer with a pointer to the new buffer, then repeats this for each of the strings, being horribly inefficient with all those copies.

The truth is, it probably never copies the source strings (the left side of the +=) for most cases.

In VC++ 6.0, in Release mode, all CString buffers are allocated in predefined quanta. These are defined as 64, 128, 256, and 512 bytes. This means that unless the strings are very long, the creation of the concatenated string is an optimized version of a strcat operation (since it knows the location of the end of the string it doesn't have to search for it, as strcat would; it just does a memcpy to the correct place) plus a recomputation of the length of the string. So it is about as efficient as the clumsier pure-C code, and one whole lot easier to write. And maintain. And understand.?

Those of you who aren't sure this is what is really happening, look in the source code for CString, strcore.cpp, in the mfc/src subdirectory of your vc98 installation. Look for the method ConcatInPlace which is called from all the += operators.

Aha! So CString isn't really "efficient!" For example, if I create

CString cat("Mew!");
then I don't get a nice, tidy little buffer 5 bytes long (4 data bytes plus the terminal NUL). Instead the system wastes all that space by giving me 64 bytes and wasting 59 of them.

If this is how you think, be prepared to reeducate yourself. Somewhere in your career somebody taught you that you always had to use as little space as possible, and this was a Good Thing.

This is incorrect. It ignores some seriously important aspects of reality.?

If you are used to programming embedded applications with 16K EPROMs, you have a particular mindset for doing such allocation. For that application domain, this is healthy. But for writing Windows applications on 500MHz, 256MB machines, it actually works against you, and creates programs that perform far worse than what you would think of as "less efficient" code.

For example, size of strings is thought to be a first-order effect. It is Good to make this small, and Bad to make it large. Nonsense. The effect of precise allocation is that after a few hours of the program running, the heap is cluttered up with little tiny pieces of storage which are useless for anything, but they increase the storage footprint of your application, increase paging traffic, can actually slow down the storage allocator to unacceptable performance levels, and eventually allow your application to grow to consume all of available memory. Storage fragmentation, a second-order or third-order effect, actually dominates system performance. Eventually, it compromises reliability, which is completely unacceptable.

Note that in Debug mode compilations, the allocation is always exact. This helps shake out bugs.

Assume your application is going to run for months at a time. For example, I bring up VC++, Word, PowerPoint, FrontPage, Outlook Express, Forté Agent, Internet Explorer, and a few other applications, and essentially never close them. I've edited using PowerPoint for days on end (on the other hand, if you've had the misfortune to have to use something like Adobe FrameMaker, you begin to appreciate reliability; I've rarely been able to use this application without it? crashing four to six times a day! And always because it has run out of space, usually by filling up my entire massive swap space!) Precise allocation is one of the misfeatures that will compromise reliability and lead to application crashes.

By making CStrings be multiples of some quantum, the memory allocator will end up cluttered with chunks of memory which are almost always immediately reusable for another CString, so the fragmentation is minimized, allocator performance is enhanced, application footprint remains almost as small as possible, and you can run for weeks or months without problem.

Aside: Many years ago, at CMU, we were writing an interactive system. Some studies of the storage allocator showed that it had a tendency to fragment memory badly. Jim Mitchell, now at Sun Microsystems, created a storage allocator that maintained running statistics about allocation size, such as the mean and standard deviation of all allocations. If a chunk of storage would be split into a size that was smaller than the mean minus one s than the prevailing allocation, he didn't split it at all, thus avoiding cluttering up the allocator with pieces too small to be usable. He actually used floating point inside an allocator! His observation was that the long-term saving in instructions by not having to ignore unusable small storage chunks far and away exceeded the additional cost of doing a few floating point operations on an allocation operation. He was right.

Never, ever think about "optimization" in terms of small-and-fast analyzed on a per-line-of-code basis. Optimization should mean small-and-fast analyzed at the complete application level (if you like New Age buzzwords, think of this as the holistic approach to program optimization, a whole lot better than the per-line basis we teach new programmers). At the complete application level, minimum-chunk string allocation is about the worst method you could possibly use.

If you think optimization is something you do at the code-line level, think again. Optimization at this level rarely matters. Read my essay on Optimization: Your Worst Enemy for some thought-provoking ideas on this topic.

Note that the += operator is special-cased; if you were to write:

CString s = SomeCString1 + SomeCString2 + SomeCString3 + "," + SomeCString4;
then each application of the + operator causes a new string to be created and a copy to be done (although it is an optimized version, since the length of the string is known and the inefficiencies of strcat do not come into play).

Summary
These are just some of the techniques for using CString. I use these every day in my programming. CString is not a terribly difficult class to deal with, but generally the MFC materials do not make all of this apparent, leaving you to figure it out on your own.

Acknowledgements
Special thanks to Lynn Wallace for pointing out a syntax error in one of the examples, Brian Ross for his comments on BSTR conversions, and Robert Quirk for his example of VARIANT-to-BSTR conversion.

總結

以上是生活随笔為你收集整理的CString Management (关于CString的所有操作)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

人妻熟女一区 | 日日天干夜夜狠狠爱 | 露脸叫床粗话东北少妇 | 国产猛烈高潮尖叫视频免费 | 国产超级va在线观看视频 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲国产欧美国产综合一区 | 对白脏话肉麻粗话av | av人摸人人人澡人人超碰下载 | 欧美成人高清在线播放 | 中文字幕无码热在线视频 | 激情爆乳一区二区三区 | 国产精品爱久久久久久久 | 内射巨臀欧美在线视频 | 国产精品久久久久久亚洲影视内衣 | 国产高清不卡无码视频 | 在线a亚洲视频播放在线观看 | 性欧美videos高清精品 | 中文字幕中文有码在线 | 国産精品久久久久久久 | 色婷婷综合中文久久一本 | 亚洲最大成人网站 | 午夜男女很黄的视频 | 久久综合香蕉国产蜜臀av | 领导边摸边吃奶边做爽在线观看 | 2019nv天堂香蕉在线观看 | 日本精品少妇一区二区三区 | 99视频精品全部免费免费观看 | 人妻无码αv中文字幕久久琪琪布 | 久久99久久99精品中文字幕 | 国产精品视频免费播放 | 国产办公室秘书无码精品99 | 偷窥村妇洗澡毛毛多 | 久久久亚洲欧洲日产国码αv | 国产免费无码一区二区视频 | 亚洲欧美日韩综合久久久 | 全球成人中文在线 | 亚洲国产日韩a在线播放 | 国产精品久久国产三级国 | 亚洲小说图区综合在线 | 亚洲午夜福利在线观看 | 亚洲国产成人a精品不卡在线 | 成人性做爰aaa片免费看不忠 | 亚洲欧美日韩国产精品一区二区 | 99精品无人区乱码1区2区3区 | 少妇愉情理伦片bd | 无码免费一区二区三区 | 性开放的女人aaa片 | 亚洲综合无码一区二区三区 | 福利一区二区三区视频在线观看 | 精品aⅴ一区二区三区 | 成在人线av无码免观看麻豆 | 高潮毛片无遮挡高清免费视频 | 欧美自拍另类欧美综合图片区 | 国产亚洲精品精品国产亚洲综合 | 久久国内精品自在自线 | 亚洲成av人片天堂网无码】 | 欧洲美熟女乱又伦 | 97久久国产亚洲精品超碰热 | 日韩精品a片一区二区三区妖精 | 窝窝午夜理论片影院 | 国产黄在线观看免费观看不卡 | 亚洲国产精品久久久天堂 | 国产成人无码午夜视频在线观看 | 少妇无码av无码专区在线观看 | 俺去俺来也在线www色官网 | 少妇无码av无码专区在线观看 | 一本久道高清无码视频 | 噜噜噜亚洲色成人网站 | 亚洲成a人一区二区三区 | 国产精品嫩草久久久久 | 国产精品成人av在线观看 | 无码任你躁久久久久久久 | 无码一区二区三区在线观看 | 亚洲乱码日产精品bd | 国产亚洲美女精品久久久2020 | 国产亚洲欧美在线专区 | 波多野42部无码喷潮在线 | 性色欲情网站iwww九文堂 | 国产成人无码区免费内射一片色欲 | 99久久亚洲精品无码毛片 | 人妻少妇精品久久 | 亚洲日本va午夜在线电影 | 欧美性猛交xxxx富婆 | 成人毛片一区二区 | 樱花草在线播放免费中文 | 亚洲精品成人福利网站 | 亚洲中文无码av永久不收费 | 成人综合网亚洲伊人 | √天堂资源地址中文在线 | 一本久久a久久精品vr综合 | 亚洲国精产品一二二线 | 牲欲强的熟妇农村老妇女视频 | 一本久久a久久精品vr综合 | 国产欧美亚洲精品a | 最新版天堂资源中文官网 | 女人高潮内射99精品 | 精品亚洲韩国一区二区三区 | 国产精品毛多多水多 | 免费无码的av片在线观看 | 欧美真人作爱免费视频 | 三级4级全黄60分钟 | 久久亚洲日韩精品一区二区三区 | aa片在线观看视频在线播放 | 日韩av无码中文无码电影 | 在线成人www免费观看视频 | 国产超级va在线观看视频 | 动漫av一区二区在线观看 | 国产香蕉尹人综合在线观看 | 亚洲中文字幕无码中文字在线 | 国产精品第一区揄拍无码 | 未满成年国产在线观看 | 无码人妻丰满熟妇区毛片18 | 久久久久99精品国产片 | 国产亚洲欧美日韩亚洲中文色 | 久久婷婷五月综合色国产香蕉 | 给我免费的视频在线观看 | 精品人妻人人做人人爽 | 三级4级全黄60分钟 | 男人的天堂2018无码 | 55夜色66夜色国产精品视频 | 亚洲а∨天堂久久精品2021 | 天堂亚洲2017在线观看 | 欧美野外疯狂做受xxxx高潮 | 欧美大屁股xxxxhd黑色 | 日韩欧美中文字幕公布 | 中文字幕无码av激情不卡 | 无码午夜成人1000部免费视频 | 日日躁夜夜躁狠狠躁 | 天下第一社区视频www日本 | 玩弄中年熟妇正在播放 | 欧美国产亚洲日韩在线二区 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲 另类 在线 欧美 制服 | 亚洲午夜福利在线观看 | 一本久道久久综合狠狠爱 | 中文字幕日韩精品一区二区三区 | 国产福利视频一区二区 | 国产一区二区三区四区五区加勒比 | 国产一区二区三区影院 | 纯爱无遮挡h肉动漫在线播放 | 亚洲成av人在线观看网址 | 亚洲人交乣女bbw | 中文字幕av伊人av无码av | 亚洲综合色区中文字幕 | 日日天干夜夜狠狠爱 | 少妇高潮喷潮久久久影院 | 少妇高潮喷潮久久久影院 | 久久综合九色综合97网 | 亚洲日本在线电影 | 日日碰狠狠躁久久躁蜜桃 | 国产三级久久久精品麻豆三级 | 在线 国产 欧美 亚洲 天堂 | 桃花色综合影院 | 又大又黄又粗又爽的免费视频 | 精品成在人线av无码免费看 | 中文字幕 人妻熟女 | 国产精品沙发午睡系列 | 色 综合 欧美 亚洲 国产 | 成人女人看片免费视频放人 | 久久综合狠狠综合久久综合88 | 中文亚洲成a人片在线观看 | 丰满人妻被黑人猛烈进入 | 亚洲国产欧美在线成人 | 国产成人综合在线女婷五月99播放 | 国产黄在线观看免费观看不卡 | 欧美激情综合亚洲一二区 | 国产精品亚洲lv粉色 | 亚洲人成无码网www | 99精品国产综合久久久久五月天 | 亚洲精品成人福利网站 | 中文字幕无码日韩欧毛 | 伊人久久大香线焦av综合影院 | 色窝窝无码一区二区三区色欲 | 日本在线高清不卡免费播放 | 成人欧美一区二区三区黑人免费 | 丰满少妇弄高潮了www | 日本免费一区二区三区最新 | 国产av无码专区亚洲a∨毛片 | 领导边摸边吃奶边做爽在线观看 | 国产激情精品一区二区三区 | 国产精品人妻一区二区三区四 | 无码人妻久久一区二区三区不卡 | 我要看www免费看插插视频 | 成人试看120秒体验区 | 亚洲精品一区二区三区四区五区 | 国产亚洲精品久久久久久 | 精品少妇爆乳无码av无码专区 | 国产香蕉尹人视频在线 | 黑人巨大精品欧美一区二区 | 丰满人妻一区二区三区免费视频 | 麻豆人妻少妇精品无码专区 | 亚洲欧美色中文字幕在线 | 久久久久免费看成人影片 | 岛国片人妻三上悠亚 | 色欲av亚洲一区无码少妇 | 性色欲网站人妻丰满中文久久不卡 | av人摸人人人澡人人超碰下载 | 黄网在线观看免费网站 | 东京无码熟妇人妻av在线网址 | 久久精品国产99精品亚洲 | 亚洲成av人综合在线观看 | 久久久久免费精品国产 | 51国偷自产一区二区三区 | 无码人妻丰满熟妇区毛片18 | 国产欧美精品一区二区三区 | 中文字幕日产无线码一区 | 天天躁日日躁狠狠躁免费麻豆 | 久久精品中文字幕大胸 | 国产偷自视频区视频 | 国产免费久久久久久无码 | 亚洲七七久久桃花影院 | 夜夜躁日日躁狠狠久久av | 免费网站看v片在线18禁无码 | 欧美大屁股xxxxhd黑色 | 男女超爽视频免费播放 | 成在人线av无码免费 | 性色欲网站人妻丰满中文久久不卡 | 亚洲另类伦春色综合小说 | 亚洲人亚洲人成电影网站色 | 激情内射日本一区二区三区 | 无码成人精品区在线观看 | 国产麻豆精品一区二区三区v视界 | 野狼第一精品社区 | 日本高清一区免费中文视频 | 国产熟妇高潮叫床视频播放 | 水蜜桃色314在线观看 | 1000部啪啪未满十八勿入下载 | 国产真人无遮挡作爱免费视频 | 又色又爽又黄的美女裸体网站 | 亚洲熟妇色xxxxx亚洲 | 欧美黑人性暴力猛交喷水 | 亚无码乱人伦一区二区 | 正在播放老肥熟妇露脸 | 中文字幕无码av波多野吉衣 | 色 综合 欧美 亚洲 国产 | 久久zyz资源站无码中文动漫 | 精品国产国产综合精品 | 国产欧美精品一区二区三区 | 四虎4hu永久免费 | 久久综合给合久久狠狠狠97色 | 99久久婷婷国产综合精品青草免费 | 99国产欧美久久久精品 | 亚洲精品午夜无码电影网 | 国产三级久久久精品麻豆三级 | 精品 日韩 国产 欧美 视频 | 久久久久久a亚洲欧洲av冫 | 综合激情五月综合激情五月激情1 | 日本熟妇乱子伦xxxx | 国产超碰人人爽人人做人人添 | 成人免费视频视频在线观看 免费 | 国产肉丝袜在线观看 | 波多野结衣一区二区三区av免费 | 国产一区二区三区日韩精品 | 久久国产自偷自偷免费一区调 | 一区二区三区高清视频一 | 国产亚洲tv在线观看 | 国产成人一区二区三区别 | 国産精品久久久久久久 | 秋霞成人午夜鲁丝一区二区三区 | 国产人妻久久精品二区三区老狼 | 激情五月综合色婷婷一区二区 | 国产精品嫩草久久久久 | 日产精品高潮呻吟av久久 | 国模大胆一区二区三区 | 欧美老熟妇乱xxxxx | 中文字幕无码免费久久9一区9 | 日韩欧美中文字幕在线三区 | 日韩欧美成人免费观看 | 成年女人永久免费看片 | 国精产品一区二区三区 | 无码人妻久久一区二区三区不卡 | 狠狠色欧美亚洲狠狠色www | 欧美35页视频在线观看 | 国产猛烈高潮尖叫视频免费 | 国产午夜福利亚洲第一 | 亚洲中文字幕av在天堂 | 国产凸凹视频一区二区 | 少妇人妻偷人精品无码视频 | 亚洲一区二区三区在线观看网站 | 亚洲一区二区观看播放 | 欧美怡红院免费全部视频 | 性欧美牲交在线视频 | 人妻aⅴ无码一区二区三区 | 国产偷自视频区视频 | 无码人妻黑人中文字幕 | 国产婷婷色一区二区三区在线 | 欧美刺激性大交 | 亚洲国产综合无码一区 | 麻豆国产人妻欲求不满谁演的 | 无码人妻精品一区二区三区下载 | 精品国产精品久久一区免费式 | 99视频精品全部免费免费观看 | 亚洲成av人在线观看网址 | 女高中生第一次破苞av | 欧美成人免费全部网站 | 牲交欧美兽交欧美 | 骚片av蜜桃精品一区 | 国产精品无套呻吟在线 | 国产农村妇女高潮大叫 | 成人亚洲精品久久久久软件 | 波多野结衣aⅴ在线 | 国语自产偷拍精品视频偷 | 婷婷五月综合缴情在线视频 | 久久国产精品二国产精品 | 亚洲精品国产第一综合99久久 | 无码av岛国片在线播放 | 国产成人一区二区三区别 | 国产区女主播在线观看 | 桃花色综合影院 | 欧美第一黄网免费网站 | 色一情一乱一伦一区二区三欧美 | 亚洲欧洲日本综合aⅴ在线 | 熟妇女人妻丰满少妇中文字幕 | 国产女主播喷水视频在线观看 | 成人毛片一区二区 | 亚洲一区av无码专区在线观看 | 国产精品久久久久无码av色戒 | 久久99精品国产麻豆蜜芽 | 无码乱肉视频免费大全合集 | 99精品国产综合久久久久五月天 | 国色天香社区在线视频 | 免费网站看v片在线18禁无码 | 日本丰满熟妇videos | 性欧美熟妇videofreesex | 亚洲aⅴ无码成人网站国产app | 免费观看的无遮挡av | 一本久久a久久精品vr综合 | 成 人 免费观看网站 | 一本精品99久久精品77 | 中文字幕乱妇无码av在线 | 奇米影视7777久久精品人人爽 | 日本熟妇大屁股人妻 | 未满小14洗澡无码视频网站 | 一二三四在线观看免费视频 | 亚洲国产精品无码久久久久高潮 | 丁香花在线影院观看在线播放 | 狠狠亚洲超碰狼人久久 | 国产午夜无码精品免费看 | 国产精品久久久久9999小说 | 久久久中文久久久无码 | 日本爽爽爽爽爽爽在线观看免 | 色婷婷久久一区二区三区麻豆 | 无码国产色欲xxxxx视频 | 国产精品久久久av久久久 | 捆绑白丝粉色jk震动捧喷白浆 | 欧美一区二区三区视频在线观看 | 亚洲男人av香蕉爽爽爽爽 | 久久久久人妻一区精品色欧美 | 又紧又大又爽精品一区二区 | 扒开双腿疯狂进出爽爽爽视频 | 人人妻人人澡人人爽精品欧美 | 特大黑人娇小亚洲女 | 中文字幕无码免费久久9一区9 | 无码一区二区三区在线 | 久久久精品456亚洲影院 | 成人免费视频一区二区 | 国产精品久久久久影院嫩草 | 亚洲一区二区三区国产精华液 | 日本www一道久久久免费榴莲 | 国产人成高清在线视频99最全资源 | 久久精品人妻少妇一区二区三区 | 国产精品沙发午睡系列 | 99久久99久久免费精品蜜桃 | 高潮毛片无遮挡高清免费 | 久久国内精品自在自线 | 国产精品自产拍在线观看 | 人妻中文无码久热丝袜 | 日日干夜夜干 | 亚洲成a人片在线观看日本 | www成人国产高清内射 | 亚洲gv猛男gv无码男同 | 熟妇女人妻丰满少妇中文字幕 | 青青青手机频在线观看 | 国产一区二区三区影院 | 特级做a爰片毛片免费69 | 爱做久久久久久 | 中文字幕乱码人妻二区三区 | 乱人伦人妻中文字幕无码 | 又大又硬又爽免费视频 | 精品人妻中文字幕有码在线 | 日本精品高清一区二区 | 亚洲理论电影在线观看 | 高清不卡一区二区三区 | 亚洲成在人网站无码天堂 | 十八禁视频网站在线观看 | 国产精品久久久久9999小说 | 久久国产自偷自偷免费一区调 | 亚洲一区二区三区无码久久 | 天天做天天爱天天爽综合网 | 午夜肉伦伦影院 | 国产情侣作爱视频免费观看 | 久久99久久99精品中文字幕 | 亚洲精品综合一区二区三区在线 | 久久zyz资源站无码中文动漫 | 久久久久久国产精品无码下载 | 日本熟妇大屁股人妻 | 乱人伦人妻中文字幕无码久久网 | 国产人妻大战黑人第1集 | 亚洲中文字幕在线无码一区二区 | 水蜜桃色314在线观看 | 国産精品久久久久久久 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产内射爽爽大片视频社区在线 | 中文久久乱码一区二区 | 中文字幕无码av波多野吉衣 | 国产高潮视频在线观看 | 西西人体www44rt大胆高清 | 最新国产麻豆aⅴ精品无码 | 亚洲日韩一区二区三区 | 国产69精品久久久久app下载 | 国产精品va在线观看无码 | 国产成人精品久久亚洲高清不卡 | 国产激情艳情在线看视频 | 国产色xx群视频射精 | 55夜色66夜色国产精品视频 | 国内精品人妻无码久久久影院蜜桃 | 成人精品视频一区二区 | 亚洲日本一区二区三区在线 | 久久99精品久久久久久动态图 | 成人无码精品1区2区3区免费看 | 99久久无码一区人妻 | 中文字幕无码乱人伦 | 麻豆蜜桃av蜜臀av色欲av | 色一情一乱一伦一区二区三欧美 | 夜夜高潮次次欢爽av女 | 国产特级毛片aaaaaa高潮流水 | 婷婷五月综合激情中文字幕 | 国产免费观看黄av片 | 老熟女重囗味hdxx69 | 亚洲中文字幕无码中字 | 亚洲日韩精品欧美一区二区 | 国产偷自视频区视频 | 成人欧美一区二区三区 | 丰满诱人的人妻3 | 国产成人无码一二三区视频 | 亚洲欧美综合区丁香五月小说 | 日日躁夜夜躁狠狠躁 | 国产成人精品优优av | 丰满人妻一区二区三区免费视频 | 日日躁夜夜躁狠狠躁 | 两性色午夜视频免费播放 | 亚洲欧美日韩综合久久久 | 在线а√天堂中文官网 | 麻豆国产人妻欲求不满谁演的 | 影音先锋中文字幕无码 | 香港三级日本三级妇三级 | 性欧美videos高清精品 | 亚洲欧美日韩国产精品一区二区 | 国产超碰人人爽人人做人人添 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲中文字幕在线观看 | 精品国产福利一区二区 | 日韩亚洲欧美中文高清在线 | 人人妻人人澡人人爽精品欧美 | а√资源新版在线天堂 | 精品人人妻人人澡人人爽人人 | 成人欧美一区二区三区黑人免费 | 精品无码国产一区二区三区av | 3d动漫精品啪啪一区二区中 | 国产亚洲精品久久久久久 | 久久国产自偷自偷免费一区调 | 国产精品国产自线拍免费软件 | 亚洲国产高清在线观看视频 | 天堂无码人妻精品一区二区三区 | 亚洲 另类 在线 欧美 制服 | 中文字幕无码视频专区 | 精品久久久无码人妻字幂 | 无码乱肉视频免费大全合集 | 欧美人与牲动交xxxx | 欧美国产亚洲日韩在线二区 | 无码国产乱人伦偷精品视频 | 久久久久免费看成人影片 | 国产无套粉嫩白浆在线 | 日本爽爽爽爽爽爽在线观看免 | 精品无人国产偷自产在线 | 亚洲精品鲁一鲁一区二区三区 | 鲁大师影院在线观看 | 最新版天堂资源中文官网 | 国产熟妇高潮叫床视频播放 | 无码人妻少妇伦在线电影 | 无码av岛国片在线播放 | 性欧美熟妇videofreesex | 美女扒开屁股让男人桶 | 亚洲码国产精品高潮在线 | 人人澡人人妻人人爽人人蜜桃 | 麻豆精品国产精华精华液好用吗 | 欧美性黑人极品hd | 亚洲精品一区三区三区在线观看 | 日本熟妇大屁股人妻 | 无码帝国www无码专区色综合 | 中文字幕av无码一区二区三区电影 | 麻豆人妻少妇精品无码专区 | 国产黄在线观看免费观看不卡 | 国产一区二区三区四区五区加勒比 | 欧美大屁股xxxxhd黑色 | 无码国产乱人伦偷精品视频 | 色 综合 欧美 亚洲 国产 | 久久久久人妻一区精品色欧美 | 嫩b人妻精品一区二区三区 | 国产精品二区一区二区aⅴ污介绍 | 狠狠色欧美亚洲狠狠色www | 国产午夜精品一区二区三区嫩草 | 午夜性刺激在线视频免费 | 国产精品亚洲综合色区韩国 | 性做久久久久久久免费看 | 久久久久成人片免费观看蜜芽 | 伊人久久大香线蕉亚洲 | 台湾无码一区二区 | 日日干夜夜干 | 日本精品人妻无码免费大全 | 成人无码精品1区2区3区免费看 | 国内精品久久久久久中文字幕 | 亚洲午夜久久久影院 | 久久精品国产日本波多野结衣 | 精品少妇爆乳无码av无码专区 | 亚洲一区二区三区四区 | 人妻少妇精品无码专区动漫 | 亚洲综合久久一区二区 | 久久这里只有精品视频9 | 精品少妇爆乳无码av无码专区 | 国产无遮挡又黄又爽又色 | 久久综合给久久狠狠97色 | 亚洲精品一区二区三区婷婷月 | 无码国产色欲xxxxx视频 | 国产午夜手机精彩视频 | 国产香蕉尹人视频在线 | 亚洲国产精品毛片av不卡在线 | 无码免费一区二区三区 | 国产一区二区三区日韩精品 | 国产亚洲视频中文字幕97精品 | 人妻夜夜爽天天爽三区 | 亚洲中文字幕久久无码 | 亚洲成a人片在线观看日本 | 无码av免费一区二区三区试看 | 天堂久久天堂av色综合 | 性做久久久久久久免费看 | 漂亮人妻洗澡被公强 日日躁 | 无码人妻出轨黑人中文字幕 | 亚洲狠狠婷婷综合久久 | 亚洲国产精品毛片av不卡在线 | 亚洲熟妇色xxxxx欧美老妇 | 婷婷色婷婷开心五月四房播播 | 97人妻精品一区二区三区 | 免费乱码人妻系列无码专区 | 理论片87福利理论电影 | 日欧一片内射va在线影院 | 妺妺窝人体色www在线小说 | 中文字幕无码热在线视频 | 日韩欧美群交p片內射中文 | 中文字幕 亚洲精品 第1页 | 日本熟妇大屁股人妻 | 国产午夜亚洲精品不卡 | 亚洲啪av永久无码精品放毛片 | 人人妻人人澡人人爽人人精品浪潮 | 一本大道久久东京热无码av | 最近中文2019字幕第二页 | 国产亚洲人成a在线v网站 | 国产内射老熟女aaaa | 男女下面进入的视频免费午夜 | 熟女少妇人妻中文字幕 | 亚洲阿v天堂在线 | 又大又黄又粗又爽的免费视频 | 日韩精品乱码av一区二区 | 欧美freesex黑人又粗又大 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | √天堂中文官网8在线 | 欧美精品国产综合久久 | 亚洲中文字幕av在天堂 | 国产97人人超碰caoprom | 欧洲熟妇精品视频 | 熟妇人妻中文av无码 | 国产特级毛片aaaaaaa高清 | 日韩少妇内射免费播放 | 成人三级无码视频在线观看 | 久久精品国产99久久6动漫 | av香港经典三级级 在线 | 老熟女乱子伦 | 国产午夜亚洲精品不卡 | 精品无码一区二区三区爱欲 | 无码av免费一区二区三区试看 | 色婷婷久久一区二区三区麻豆 | 国产激情无码一区二区app | 欧美丰满熟妇xxxx性ppx人交 | 国产无遮挡吃胸膜奶免费看 | 久久精品成人欧美大片 | 黑人粗大猛烈进出高潮视频 | 成人免费视频在线观看 | 国产精品第一区揄拍无码 | 天堂久久天堂av色综合 | 最近的中文字幕在线看视频 | 成人aaa片一区国产精品 | 成人三级无码视频在线观看 | 日韩精品无码免费一区二区三区 | 久久99国产综合精品 | 日本一卡二卡不卡视频查询 | 奇米影视7777久久精品人人爽 | www国产亚洲精品久久久日本 | 日日摸日日碰夜夜爽av | 色偷偷人人澡人人爽人人模 | 国产成人精品必看 | 欧美 日韩 人妻 高清 中文 | 伊人久久大香线蕉av一区二区 | 福利一区二区三区视频在线观看 | 亚洲а∨天堂久久精品2021 | 婷婷六月久久综合丁香 | 99久久无码一区人妻 | 日本熟妇大屁股人妻 | 国产色在线 | 国产 | 亚洲a无码综合a国产av中文 | 国产又爽又黄又刺激的视频 | 亚洲成av人综合在线观看 | 日韩欧美成人免费观看 | 欧美色就是色 | 激情人妻另类人妻伦 | 亚洲中文无码av永久不收费 | 亚洲伊人久久精品影院 | 俺去俺来也在线www色官网 | 久久亚洲精品中文字幕无男同 | 亚洲国产av精品一区二区蜜芽 | 又大又硬又爽免费视频 | 一本大道久久东京热无码av | 娇妻被黑人粗大高潮白浆 | 亚洲一区av无码专区在线观看 | 色婷婷香蕉在线一区二区 | 午夜男女很黄的视频 | 大色综合色综合网站 | 亚洲欧美色中文字幕在线 | 成人免费视频视频在线观看 免费 | 亚洲一区二区三区含羞草 | 熟女少妇人妻中文字幕 | 亚洲国产精品无码久久久久高潮 | 久久久久久亚洲精品a片成人 | 国产精品99久久精品爆乳 | 成人无码影片精品久久久 | 性生交大片免费看女人按摩摩 | 天海翼激烈高潮到腰振不止 | 久久久久久国产精品无码下载 | 我要看www免费看插插视频 | 色情久久久av熟女人妻网站 | 人妻与老人中文字幕 | 欧美自拍另类欧美综合图片区 | 午夜福利不卡在线视频 | 久久97精品久久久久久久不卡 | 精品国产aⅴ无码一区二区 | 亚洲自偷精品视频自拍 | 亚洲码国产精品高潮在线 | 无码人妻丰满熟妇区五十路百度 | 久久久无码中文字幕久... | 日韩精品a片一区二区三区妖精 | 77777熟女视频在线观看 а天堂中文在线官网 | 国产精品久久国产三级国 | 日本成熟视频免费视频 | 亚洲乱码中文字幕在线 | 久久97精品久久久久久久不卡 | 丰满少妇人妻久久久久久 | 丰满少妇熟乱xxxxx视频 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 精品无码国产一区二区三区av | 在线观看欧美一区二区三区 | 精品无码国产一区二区三区av | 97精品人妻一区二区三区香蕉 | 国产激情艳情在线看视频 | 国产亚洲精品久久久久久久 | 国产xxx69麻豆国语对白 | 99精品无人区乱码1区2区3区 | 小sao货水好多真紧h无码视频 | 国产精品无码mv在线观看 | 色婷婷综合激情综在线播放 | 国产综合久久久久鬼色 | 欧美日韩视频无码一区二区三 | 国产精品鲁鲁鲁 | 国产成人精品久久亚洲高清不卡 | 男女作爱免费网站 | 国产精品久久久久无码av色戒 | 人妻天天爽夜夜爽一区二区 | 国内精品人妻无码久久久影院蜜桃 | 欧美三级a做爰在线观看 | 亚洲精品久久久久avwww潮水 | 内射爽无广熟女亚洲 | 娇妻被黑人粗大高潮白浆 | 男女猛烈xx00免费视频试看 | 最新国产麻豆aⅴ精品无码 | 欧美人与禽zoz0性伦交 | 天堂亚洲免费视频 | 天堂在线观看www | 国产精品福利视频导航 | 牛和人交xxxx欧美 | 又大又硬又黄的免费视频 | 久久国产36精品色熟妇 | 成人无码视频免费播放 | 国产无套内射久久久国产 | 亚洲欧美日韩综合久久久 | 亚洲一区二区三区播放 | 无码av岛国片在线播放 | 日本欧美一区二区三区乱码 | 四虎国产精品一区二区 | 婷婷综合久久中文字幕蜜桃三电影 | 99久久亚洲精品无码毛片 | 国产 浪潮av性色四虎 | 亚洲精品久久久久久一区二区 | 欧美丰满老熟妇xxxxx性 | 妺妺窝人体色www在线小说 | 国产在线aaa片一区二区99 | 十八禁真人啪啪免费网站 | 日韩人妻无码一区二区三区久久99 | 欧美三级不卡在线观看 | 国产成人精品久久亚洲高清不卡 | 少妇人妻大乳在线视频 | 亚洲自偷自拍另类第1页 | 日本高清一区免费中文视频 | 亚洲高清偷拍一区二区三区 | 牲交欧美兽交欧美 | 亚洲大尺度无码无码专区 | 欧美激情内射喷水高潮 | 日本护士xxxxhd少妇 | 国产超级va在线观看视频 | 在线 国产 欧美 亚洲 天堂 | 国产精品-区区久久久狼 | 久久久亚洲欧洲日产国码αv | 国产性生交xxxxx无码 | 人人爽人人澡人人人妻 | 国产人妻大战黑人第1集 | 波多野结衣高清一区二区三区 | 国产人妻久久精品二区三区老狼 | 中文字幕亚洲情99在线 | 欧美 丝袜 自拍 制服 另类 | 久久精品99久久香蕉国产色戒 | 亚洲欧美色中文字幕在线 | 日本乱偷人妻中文字幕 | 国产真实夫妇视频 | 国产熟女一区二区三区四区五区 | 97久久精品无码一区二区 | 久久zyz资源站无码中文动漫 | 岛国片人妻三上悠亚 | 国产精品多人p群无码 | 99久久人妻精品免费一区 | 精品一区二区三区无码免费视频 | 伊人久久大香线蕉av一区二区 | 亚洲精品久久久久avwww潮水 | 欧美一区二区三区视频在线观看 | 亚洲精品久久久久中文第一幕 | 天堂亚洲免费视频 | 曰韩少妇内射免费播放 | 国产真人无遮挡作爱免费视频 | 精品无码一区二区三区的天堂 | 国产深夜福利视频在线 | 色偷偷人人澡人人爽人人模 | 欧美35页视频在线观看 | 国产无av码在线观看 | 成人亚洲精品久久久久 | 亚洲小说春色综合另类 | 九九热爱视频精品 | 天堂一区人妻无码 | 欧美真人作爱免费视频 | √天堂中文官网8在线 | 奇米影视7777久久精品人人爽 | 国产另类ts人妖一区二区 | 中国大陆精品视频xxxx | 国产一区二区三区日韩精品 | av无码不卡在线观看免费 | 98国产精品综合一区二区三区 | 性欧美疯狂xxxxbbbb | 麻豆果冻传媒2021精品传媒一区下载 | 性色欲情网站iwww九文堂 | 亚洲中文字幕无码一久久区 | 俺去俺来也在线www色官网 | 欧美日韩一区二区综合 | 18禁止看的免费污网站 | 波多野结衣av在线观看 | 国产精品久久久久9999小说 | 欧美人与禽zoz0性伦交 | 麻豆精产国品 | 亚洲国产精品无码一区二区三区 | 狠狠躁日日躁夜夜躁2020 | 亚洲国产精品久久久久久 | 亚洲精品鲁一鲁一区二区三区 | 国产香蕉97碰碰久久人人 | 成人综合网亚洲伊人 | 亚洲综合无码久久精品综合 | 大乳丰满人妻中文字幕日本 | 国产性生交xxxxx无码 | 一本大道伊人av久久综合 | 狠狠亚洲超碰狼人久久 | 人人妻人人澡人人爽人人精品浪潮 | 我要看www免费看插插视频 | 无遮挡国产高潮视频免费观看 | 亚洲男女内射在线播放 | 无套内谢的新婚少妇国语播放 | 亚洲日韩乱码中文无码蜜桃臀网站 | 久久精品国产亚洲精品 | 色狠狠av一区二区三区 | 亚洲国产精品毛片av不卡在线 | 中文久久乱码一区二区 | 日本护士xxxxhd少妇 | 国产午夜精品一区二区三区嫩草 | 无遮挡啪啪摇乳动态图 | 图片小说视频一区二区 | 人妻天天爽夜夜爽一区二区 | 色五月五月丁香亚洲综合网 | 亚洲自偷自偷在线制服 | 亚洲日本一区二区三区在线 | 亚洲 欧美 激情 小说 另类 | 亚洲国产精品一区二区美利坚 | 亚洲中文字幕无码一久久区 | 久久久久成人片免费观看蜜芽 | 亚洲毛片av日韩av无码 | 欧美国产日韩亚洲中文 | 性欧美疯狂xxxxbbbb | 亚洲色大成网站www国产 | 男人扒开女人内裤强吻桶进去 | 乱人伦人妻中文字幕无码 | 国产艳妇av在线观看果冻传媒 | 日日天日日夜日日摸 | 欧美黑人巨大xxxxx | 日本丰满熟妇videos | 成年美女黄网站色大免费全看 | 亚洲日本va午夜在线电影 | 亚洲欧洲日本无在线码 | 又黄又爽又色的视频 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲国精产品一二二线 | 国产在线精品一区二区三区直播 | 九九综合va免费看 | 精品国产成人一区二区三区 | 日日麻批免费40分钟无码 | 东京一本一道一二三区 | 最近免费中文字幕中文高清百度 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲精品美女久久久久久久 | 特黄特色大片免费播放器图片 | 国产国语老龄妇女a片 | 国产美女极度色诱视频www | 亚洲日韩精品欧美一区二区 | 国内少妇偷人精品视频 | 永久免费观看国产裸体美女 | 少妇的肉体aa片免费 | 风流少妇按摩来高潮 | 色欲久久久天天天综合网精品 | 鲁大师影院在线观看 | 久久www免费人成人片 | 偷窥日本少妇撒尿chinese | 欧美激情一区二区三区成人 | 国产婷婷色一区二区三区在线 | 精品乱码久久久久久久 | 久久久久成人精品免费播放动漫 | 天堂а√在线地址中文在线 | 成 人影片 免费观看 | 成 人 网 站国产免费观看 | 十八禁视频网站在线观看 | 免费无码av一区二区 | 2020久久香蕉国产线看观看 | 又大又黄又粗又爽的免费视频 | 美女扒开屁股让男人桶 | 夜夜躁日日躁狠狠久久av | 少妇久久久久久人妻无码 | 久久成人a毛片免费观看网站 | 亚洲日本va中文字幕 | 日韩av无码中文无码电影 | 日日天干夜夜狠狠爱 | 久久人人爽人人人人片 | 夜夜夜高潮夜夜爽夜夜爰爰 | 伊人久久大香线焦av综合影院 | 久久www免费人成人片 | 88国产精品欧美一区二区三区 | 国产精品99爱免费视频 | 亚洲精品成人福利网站 | 中文久久乱码一区二区 | 搡女人真爽免费视频大全 | 亚洲啪av永久无码精品放毛片 | 亚洲高清偷拍一区二区三区 | 国产午夜亚洲精品不卡下载 | 国产xxx69麻豆国语对白 | 丰满少妇高潮惨叫视频 | 亚洲乱亚洲乱妇50p | 樱花草在线社区www | 特大黑人娇小亚洲女 | 无码免费一区二区三区 | 国产亚洲欧美日韩亚洲中文色 | 亚洲日韩av片在线观看 | 亚洲阿v天堂在线 | 免费无码的av片在线观看 | 99国产精品白浆在线观看免费 | 色老头在线一区二区三区 | 玩弄中年熟妇正在播放 | 人人妻人人澡人人爽欧美一区 | 亚洲综合无码久久精品综合 | 国产在线精品一区二区三区直播 | 精品国偷自产在线 | 特级做a爰片毛片免费69 | 玩弄少妇高潮ⅹxxxyw | 午夜丰满少妇性开放视频 | 图片小说视频一区二区 | 亚洲日韩av片在线观看 | 特黄特色大片免费播放器图片 | 国产亚洲精品久久久久久久久动漫 | 男女性色大片免费网站 | 性欧美大战久久久久久久 | 色窝窝无码一区二区三区色欲 | 国产精品va在线观看无码 | 精品日本一区二区三区在线观看 | 国产成人无码av片在线观看不卡 | 熟妇激情内射com | 精品欧洲av无码一区二区三区 | 蜜臀aⅴ国产精品久久久国产老师 | 国产国产精品人在线视 | 国产一区二区三区日韩精品 | 久久亚洲日韩精品一区二区三区 | 国产真实夫妇视频 | 牲欲强的熟妇农村老妇女 | 色综合久久久久综合一本到桃花网 | 在线观看国产一区二区三区 | 亚洲中文字幕av在天堂 | 少妇性l交大片欧洲热妇乱xxx | 在线观看国产午夜福利片 | 美女极度色诱视频国产 | 欧美人与物videos另类 | √8天堂资源地址中文在线 | 日本精品久久久久中文字幕 | 青草视频在线播放 | 99久久久无码国产精品免费 | 久久精品国产精品国产精品污 | 老司机亚洲精品影院 | 日本护士xxxxhd少妇 | 亚洲人成网站在线播放942 | 捆绑白丝粉色jk震动捧喷白浆 | 久久www免费人成人片 | 成人欧美一区二区三区 | 国产精品美女久久久 | 亚洲精品欧美二区三区中文字幕 | 国产精品爱久久久久久久 | 影音先锋中文字幕无码 | 久久伊人色av天堂九九小黄鸭 | 欧美真人作爱免费视频 | 亚洲综合精品香蕉久久网 | 国产亚洲人成a在线v网站 | 久久国产36精品色熟妇 | 97无码免费人妻超级碰碰夜夜 | 国产无套粉嫩白浆在线 | 无码一区二区三区在线观看 | 亚洲爆乳精品无码一区二区三区 | 亚洲中文字幕无码一久久区 | 99久久精品国产一区二区蜜芽 | 久久五月精品中文字幕 | 成年美女黄网站色大免费视频 | 国产9 9在线 | 中文 | 久久婷婷五月综合色国产香蕉 | 国产精品人人爽人人做我的可爱 | 日韩亚洲欧美精品综合 | 国产精品亚洲综合色区韩国 | 中文亚洲成a人片在线观看 | a片在线免费观看 | 成人一在线视频日韩国产 | 综合人妻久久一区二区精品 | 亚洲成色在线综合网站 | 日韩精品a片一区二区三区妖精 | 亚洲热妇无码av在线播放 | 免费国产成人高清在线观看网站 | 强开小婷嫩苞又嫩又紧视频 | 亚洲中文字幕久久无码 | 强奷人妻日本中文字幕 | 日日噜噜噜噜夜夜爽亚洲精品 | 中文字幕日产无线码一区 | 亚洲国产综合无码一区 | www国产精品内射老师 | 欧美三级a做爰在线观看 | 色综合久久久无码中文字幕 | 人人澡人人透人人爽 | 水蜜桃亚洲一二三四在线 | 国产成人精品三级麻豆 | 国产在线精品一区二区高清不卡 | 色综合久久久无码网中文 | 一本久道高清无码视频 | 精品久久久无码中文字幕 | 青青青爽视频在线观看 | 国产成人精品视频ⅴa片软件竹菊 | 国产情侣作爱视频免费观看 | 扒开双腿疯狂进出爽爽爽视频 | 88国产精品欧美一区二区三区 | 成熟女人特级毛片www免费 | 麻豆蜜桃av蜜臀av色欲av | 国产在线无码精品电影网 | 久久国产精品萌白酱免费 | 色狠狠av一区二区三区 | 国产亚洲精品久久久久久 | 亚洲日韩一区二区 | 国产香蕉97碰碰久久人人 | 无码精品国产va在线观看dvd | 欧美日韩色另类综合 | 性生交片免费无码看人 | 性啪啪chinese东北女人 | 婷婷丁香五月天综合东京热 | 国产高清av在线播放 | www国产亚洲精品久久网站 | 亚洲精品久久久久中文第一幕 | 精品国产一区二区三区av 性色 | 亚洲娇小与黑人巨大交 | 国产一区二区不卡老阿姨 | 亚洲区小说区激情区图片区 | 亚洲精品一区二区三区大桥未久 | 六月丁香婷婷色狠狠久久 | 久久无码专区国产精品s | 无码人妻丰满熟妇区毛片18 | 啦啦啦www在线观看免费视频 | 在线播放免费人成毛片乱码 | 一二三四在线观看免费视频 | 久久久久人妻一区精品色欧美 | 在线观看国产一区二区三区 | 全球成人中文在线 | 亚洲午夜无码久久 | 天天拍夜夜添久久精品大 | 最近免费中文字幕中文高清百度 | 精品欧美一区二区三区久久久 | 亚洲va欧美va天堂v国产综合 | 99久久精品无码一区二区毛片 | 无码人妻丰满熟妇区五十路百度 | 午夜福利不卡在线视频 | 国产三级精品三级男人的天堂 | 国产 精品 自在自线 | 成人亚洲精品久久久久软件 | 在线观看欧美一区二区三区 | 亚洲日韩av片在线观看 | 久久99精品久久久久久 | 中文字幕无码视频专区 | 伊人久久婷婷五月综合97色 | 青草视频在线播放 | 麻豆成人精品国产免费 | 中文字幕乱码中文乱码51精品 | 精品无码av一区二区三区 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲色欲色欲欲www在线 | 亚洲中文字幕在线观看 | 久久99精品国产.久久久久 | 麻豆精产国品 | 成人无码精品一区二区三区 | 国产成人精品优优av | 精品无码国产一区二区三区av | 国产内射老熟女aaaa | 日日干夜夜干 | 成在人线av无码免费 | 久久精品人人做人人综合试看 | 久久精品一区二区三区四区 | 东京热一精品无码av | 久久精品国产一区二区三区肥胖 | 好男人www社区 | 少妇高潮一区二区三区99 | 日本肉体xxxx裸交 | 国产精品自产拍在线观看 | 天天躁夜夜躁狠狠是什么心态 | 正在播放老肥熟妇露脸 | 人妻aⅴ无码一区二区三区 | 久久精品国产99久久6动漫 | 奇米影视7777久久精品 | 久久久精品国产sm最大网站 | 成人精品一区二区三区中文字幕 | 一本久久a久久精品亚洲 | 98国产精品综合一区二区三区 | 亚洲啪av永久无码精品放毛片 | 精品欧美一区二区三区久久久 | а√天堂www在线天堂小说 | 中文字幕亚洲情99在线 | 曰韩无码二三区中文字幕 | 国产无遮挡吃胸膜奶免费看 | 精品成人av一区二区三区 | 夫妻免费无码v看片 | 精品久久久久久人妻无码中文字幕 | 国产绳艺sm调教室论坛 | 国产精品亚洲а∨无码播放麻豆 | 三上悠亚人妻中文字幕在线 | 国产色精品久久人妻 | 任你躁在线精品免费 | 亚洲午夜久久久影院 | 露脸叫床粗话东北少妇 | 日本大乳高潮视频在线观看 | 99久久精品国产一区二区蜜芽 | 国产做国产爱免费视频 | 日日碰狠狠躁久久躁蜜桃 | 久久久av男人的天堂 | 久久久久久久久蜜桃 | 免费播放一区二区三区 | 亚洲欧洲日本综合aⅴ在线 | 红桃av一区二区三区在线无码av | 成人三级无码视频在线观看 | 天堂亚洲2017在线观看 | 伊在人天堂亚洲香蕉精品区 | 任你躁在线精品免费 | 嫩b人妻精品一区二区三区 | 久久久无码中文字幕久... | 亚洲a无码综合a国产av中文 | av无码久久久久不卡免费网站 | 日韩少妇内射免费播放 | 国产内射老熟女aaaa | 成人亚洲精品久久久久 | 日韩精品成人一区二区三区 | 国产真实夫妇视频 | 狠狠色噜噜狠狠狠狠7777米奇 | 特黄特色大片免费播放器图片 | 欧美黑人性暴力猛交喷水 | 国产精品第一国产精品 | 国产亚洲tv在线观看 | 俺去俺来也在线www色官网 | 久久精品人妻少妇一区二区三区 | 国产人妻久久精品二区三区老狼 | 亚洲欧美色中文字幕在线 | 大乳丰满人妻中文字幕日本 | 国产精品多人p群无码 | 日本精品人妻无码免费大全 | 中文毛片无遮挡高清免费 | 婷婷丁香五月天综合东京热 | 国产人妻精品一区二区三区不卡 | 久久精品国产日本波多野结衣 | 5858s亚洲色大成网站www | 免费无码肉片在线观看 | 中文字幕无码免费久久9一区9 | 精品人妻中文字幕有码在线 | 精品国产精品久久一区免费式 | 一本一道久久综合久久 | 国产亲子乱弄免费视频 | 亚洲а∨天堂久久精品2021 | 中文字幕+乱码+中文字幕一区 | 亚洲人亚洲人成电影网站色 | 俺去俺来也www色官网 | 欧美老熟妇乱xxxxx | 一本久久a久久精品vr综合 | 成人无码精品一区二区三区 | 欧美自拍另类欧美综合图片区 | 特大黑人娇小亚洲女 | 日本爽爽爽爽爽爽在线观看免 | 97久久超碰中文字幕 | 亚洲精品一区二区三区在线观看 | 伊在人天堂亚洲香蕉精品区 | 亚洲综合在线一区二区三区 | 精品人妻中文字幕有码在线 | 久久精品中文闷骚内射 | 国产麻豆精品一区二区三区v视界 | 亚洲国产一区二区三区在线观看 | 亚洲乱码中文字幕在线 | 欧美 日韩 人妻 高清 中文 | 精品国产一区二区三区四区在线看 | 一区二区三区高清视频一 | 少妇邻居内射在线 | 午夜成人1000部免费视频 | 窝窝午夜理论片影院 | 欧美一区二区三区视频在线观看 | 国产特级毛片aaaaaa高潮流水 | 天堂а√在线地址中文在线 | 中文字幕乱码中文乱码51精品 | 国产美女极度色诱视频www | 熟妇人妻激情偷爽文 | 理论片87福利理论电影 | 亚洲成熟女人毛毛耸耸多 | 成人女人看片免费视频放人 | 综合激情五月综合激情五月激情1 | 免费无码一区二区三区蜜桃大 | 无码人妻丰满熟妇区五十路百度 | 日韩亚洲欧美中文高清在线 | 精品无码国产一区二区三区av | 奇米影视888欧美在线观看 | 国产无遮挡又黄又爽又色 | 人妻少妇被猛烈进入中文字幕 | 亚洲色欲色欲欲www在线 | 九九热爱视频精品 | 精品aⅴ一区二区三区 | 亚洲国产欧美在线成人 | 在线看片无码永久免费视频 | 中文字幕无码av波多野吉衣 | 久久精品女人天堂av免费观看 | 在线精品国产一区二区三区 | 国产香蕉尹人综合在线观看 | 国产精品久久久久久亚洲影视内衣 | 日本精品高清一区二区 | 中文字幕无码av波多野吉衣 | 中文字幕无码视频专区 | 日韩精品a片一区二区三区妖精 | 少妇性俱乐部纵欲狂欢电影 | 伦伦影院午夜理论片 | 日韩精品无码一区二区中文字幕 | 欧美日本免费一区二区三区 | 午夜精品久久久久久久久 | 色诱久久久久综合网ywww | 男女猛烈xx00免费视频试看 | 久久天天躁狠狠躁夜夜免费观看 | 日本饥渴人妻欲求不满 | 荫蒂添的好舒服视频囗交 | 黄网在线观看免费网站 | 东京一本一道一二三区 | 免费乱码人妻系列无码专区 | 免费国产黄网站在线观看 | 亚无码乱人伦一区二区 | 亚洲一区二区三区含羞草 | 久久99热只有频精品8 | 色婷婷综合中文久久一本 | 中文字幕乱码中文乱码51精品 | 色综合久久久无码中文字幕 | 国产极品美女高潮无套在线观看 | 欧美性生交xxxxx久久久 | 最近中文2019字幕第二页 | 国产无遮挡吃胸膜奶免费看 | 久久99精品久久久久婷婷 | 内射白嫩少妇超碰 | 国产激情无码一区二区 | 国产舌乚八伦偷品w中 | 国产午夜亚洲精品不卡下载 | 兔费看少妇性l交大片免费 | 欧美变态另类xxxx | 国产精品无码一区二区桃花视频 | 一本久道久久综合狠狠爱 | 成人免费视频在线观看 | 亚洲 a v无 码免 费 成 人 a v | 在线欧美精品一区二区三区 | 人妻少妇精品无码专区二区 | 亚洲s色大片在线观看 | 久久综合九色综合97网 | 又大又硬又爽免费视频 | 国产在线精品一区二区三区直播 | 中国大陆精品视频xxxx | 亚洲综合精品香蕉久久网 | 中文字幕乱妇无码av在线 | 一区二区三区高清视频一 | 亚洲精品鲁一鲁一区二区三区 | 老熟女重囗味hdxx69 | 亚洲人成无码网www | 乱人伦人妻中文字幕无码久久网 | 成人aaa片一区国产精品 | 少妇高潮喷潮久久久影院 | 亚洲精品中文字幕久久久久 | 成 人影片 免费观看 | 狠狠亚洲超碰狼人久久 | 亚洲一区二区观看播放 | 日本丰满护士爆乳xxxx | 日本一本二本三区免费 | 日本欧美一区二区三区乱码 | 中文字幕亚洲情99在线 | 日产精品99久久久久久 | 成熟人妻av无码专区 | 久久久久久久女国产乱让韩 | 国产成人无码专区 | 中文字幕乱码中文乱码51精品 | 精品久久8x国产免费观看 | 99视频精品全部免费免费观看 | 中文久久乱码一区二区 | 国产艳妇av在线观看果冻传媒 | 88国产精品欧美一区二区三区 | 欧美人与牲动交xxxx | 欧美亚洲国产一区二区三区 | 精品 日韩 国产 欧美 视频 | 免费人成在线观看网站 | 日日橹狠狠爱欧美视频 | 狂野欧美性猛xxxx乱大交 | 久久国产精品偷任你爽任你 | 欧美兽交xxxx×视频 | 99er热精品视频 | 欧美午夜特黄aaaaaa片 | 亚洲伊人久久精品影院 | 激情内射日本一区二区三区 | 免费无码午夜福利片69 | 国色天香社区在线视频 | 18无码粉嫩小泬无套在线观看 | 久久精品成人欧美大片 | 四虎国产精品一区二区 | 国产精品福利视频导航 | 黑人粗大猛烈进出高潮视频 | 黄网在线观看免费网站 | 黄网在线观看免费网站 | 国产精品99久久精品爆乳 | 麻豆果冻传媒2021精品传媒一区下载 | 成人精品一区二区三区中文字幕 | 偷窥日本少妇撒尿chinese | 桃花色综合影院 | 国产片av国语在线观看 | 日本护士毛茸茸高潮 | 99久久亚洲精品无码毛片 | 四虎国产精品免费久久 | 国产亚洲人成在线播放 | 久久综合激激的五月天 | 给我免费的视频在线观看 | 超碰97人人做人人爱少妇 | 成人免费视频视频在线观看 免费 | 国产麻豆精品精东影业av网站 | 国产精品va在线播放 | 2020久久香蕉国产线看观看 | 精品国产成人一区二区三区 | 国产三级久久久精品麻豆三级 | 日韩欧美中文字幕公布 | 国产成人无码a区在线观看视频app | 色欲久久久天天天综合网精品 | 亚洲自偷自拍另类第1页 | 午夜精品一区二区三区在线观看 | 亚洲午夜久久久影院 | 狂野欧美激情性xxxx | 久久国内精品自在自线 | 国产精品毛片一区二区 | 亚洲性无码av中文字幕 | 免费无码av一区二区 | 亚洲日韩av一区二区三区四区 | 久久国产自偷自偷免费一区调 | 秋霞特色aa大片 | 日韩成人一区二区三区在线观看 | 中国大陆精品视频xxxx | 色综合久久久无码网中文 | 四十如虎的丰满熟妇啪啪 | 亚洲中文字幕无码中字 | 日日碰狠狠躁久久躁蜜桃 | 国产午夜精品一区二区三区嫩草 | 老熟女重囗味hdxx69 | 日本护士xxxxhd少妇 | 给我免费的视频在线观看 | 欧美人与牲动交xxxx | 国产精品久久精品三级 | 久久99久久99精品中文字幕 | 永久黄网站色视频免费直播 | 桃花色综合影院 | 国产99久久精品一区二区 | 三上悠亚人妻中文字幕在线 | 久久久久久a亚洲欧洲av冫 | 国产精品免费大片 | 老熟妇仑乱视频一区二区 | 99久久精品无码一区二区毛片 | 荡女精品导航 | 午夜性刺激在线视频免费 | 精品熟女少妇av免费观看 | 国产香蕉尹人视频在线 | 日本一卡2卡3卡四卡精品网站 | 欧美日韩在线亚洲综合国产人 | 亚洲 日韩 欧美 成人 在线观看 | 国产激情精品一区二区三区 | 又紧又大又爽精品一区二区 | 爱做久久久久久 | 国产99久久精品一区二区 | 2020久久超碰国产精品最新 | 免费观看激色视频网站 | 女人被男人爽到呻吟的视频 | 噜噜噜亚洲色成人网站 | 午夜男女很黄的视频 | 国产尤物精品视频 | 欧洲熟妇色 欧美 | 丰满少妇熟乱xxxxx视频 | 久久综合给合久久狠狠狠97色 | 激情人妻另类人妻伦 | 亚洲一区二区三区四区 | 国产人妻人伦精品 | 少女韩国电视剧在线观看完整 | 中文字幕乱码亚洲无线三区 | 女人色极品影院 | 日韩人妻系列无码专区 | 久久久精品欧美一区二区免费 | 无码帝国www无码专区色综合 | 国产精品久久久久无码av色戒 | 亚洲另类伦春色综合小说 | 亚洲欧美日韩国产精品一区二区 | 亚洲 高清 成人 动漫 | 丁香啪啪综合成人亚洲 | 国产香蕉尹人综合在线观看 | 精品一二三区久久aaa片 | 久久久国产精品无码免费专区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 高潮毛片无遮挡高清免费 | 婷婷五月综合激情中文字幕 | 亚洲午夜无码久久 | 大地资源网第二页免费观看 | 性色欲网站人妻丰满中文久久不卡 | 欧美性猛交内射兽交老熟妇 | 久久视频在线观看精品 | 少妇无码一区二区二三区 | 中文字幕av伊人av无码av | 婷婷色婷婷开心五月四房播播 | 亚洲国产精品一区二区第一页 | av无码电影一区二区三区 | 亚洲中文字幕成人无码 | 又湿又紧又大又爽a视频国产 | 午夜成人1000部免费视频 | 人人澡人人妻人人爽人人蜜桃 | 亚洲色在线无码国产精品不卡 | 成人影院yy111111在线观看 | 国产精品亚洲一区二区三区喷水 | 无码一区二区三区在线 | 成 人影片 免费观看 | 蜜臀aⅴ国产精品久久久国产老师 | 国产人妻大战黑人第1集 | 女人色极品影院 | 131美女爱做视频 | 亚洲精品欧美二区三区中文字幕 | 亚洲中文字幕无码中字 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲欧美国产精品专区久久 | 国内揄拍国内精品少妇国语 | 综合网日日天干夜夜久久 | 亚洲精品久久久久avwww潮水 | 一本久久伊人热热精品中文字幕 | 亚洲狠狠婷婷综合久久 | 国产高清不卡无码视频 | 久久久无码中文字幕久... | 帮老师解开蕾丝奶罩吸乳网站 | 无码吃奶揉捏奶头高潮视频 | 国内精品人妻无码久久久影院蜜桃 | 成人av无码一区二区三区 | 亚洲国产欧美在线成人 | 久久午夜无码鲁丝片 | 蜜桃无码一区二区三区 | 丁香花在线影院观看在线播放 | 人妻无码αv中文字幕久久琪琪布 | 欧美自拍另类欧美综合图片区 | 日本在线高清不卡免费播放 | 色五月五月丁香亚洲综合网 | 水蜜桃色314在线观看 | 呦交小u女精品视频 | 蜜臀av无码人妻精品 | 中国女人内谢69xxxx | 夜夜躁日日躁狠狠久久av | 熟女少妇人妻中文字幕 | 伊人久久婷婷五月综合97色 | 少妇一晚三次一区二区三区 | 少妇无码一区二区二三区 | 色婷婷综合激情综在线播放 | 国产精品沙发午睡系列 | 99久久久无码国产aaa精品 | 丰满人妻一区二区三区免费视频 | 日韩精品成人一区二区三区 | 狠狠色噜噜狠狠狠7777奇米 | 波多野结衣乳巨码无在线观看 | 亚洲精品中文字幕久久久久 | 亚洲热妇无码av在线播放 | 蜜桃视频插满18在线观看 | 国精品人妻无码一区二区三区蜜柚 | 久久国产精品精品国产色婷婷 | 奇米影视7777久久精品人人爽 | 最新国产乱人伦偷精品免费网站 | 黑人粗大猛烈进出高潮视频 | 亚洲日本va午夜在线电影 | 亚洲熟悉妇女xxx妇女av | 亚洲精品国偷拍自产在线麻豆 | 人人妻人人澡人人爽精品欧美 | 亚洲国产成人a精品不卡在线 | 久久精品女人天堂av免费观看 | 麻豆md0077饥渴少妇 | 少妇高潮喷潮久久久影院 | 扒开双腿疯狂进出爽爽爽视频 | 天天燥日日燥 | 秋霞特色aa大片 | 国产成人精品必看 | 欧美一区二区三区 | 成人综合网亚洲伊人 | 国产成人精品三级麻豆 | 日本精品少妇一区二区三区 | 少妇性俱乐部纵欲狂欢电影 | 欧美兽交xxxx×视频 | 亚洲а∨天堂久久精品2021 | 亚洲伊人久久精品影院 | 麻豆成人精品国产免费 | 成人无码视频在线观看网站 | 黑人粗大猛烈进出高潮视频 | 国产精品爱久久久久久久 | 精品熟女少妇av免费观看 | ass日本丰满熟妇pics | 亚洲熟女一区二区三区 | 国产黄在线观看免费观看不卡 | 日本成熟视频免费视频 | 久久人人爽人人爽人人片ⅴ | 欧美freesex黑人又粗又大 | 99视频精品全部免费免费观看 | 日本欧美一区二区三区乱码 | 欧美色就是色 | 无码中文字幕色专区 | 成人片黄网站色大片免费观看 | 亚洲 激情 小说 另类 欧美 | 国内少妇偷人精品视频 | 人妻少妇被猛烈进入中文字幕 | 内射老妇bbwx0c0ck | 亚洲爆乳精品无码一区二区三区 | 一区二区传媒有限公司 | 亚洲国产av精品一区二区蜜芽 | 未满小14洗澡无码视频网站 | 亚洲精品综合五月久久小说 | 色综合视频一区二区三区 | 精品日本一区二区三区在线观看 | 精品 日韩 国产 欧美 视频 | 天天摸天天透天天添 | 福利一区二区三区视频在线观看 | 色婷婷av一区二区三区之红樱桃 | 国产无遮挡又黄又爽免费视频 | 亚洲精品一区二区三区在线观看 | 内射老妇bbwx0c0ck | 亚洲熟妇自偷自拍另类 | 三级4级全黄60分钟 | 成人免费视频在线观看 | 亚洲爆乳无码专区 | 国产精品亚洲一区二区三区喷水 | 99麻豆久久久国产精品免费 | 男女超爽视频免费播放 | 国产国语老龄妇女a片 | 亚洲色在线无码国产精品不卡 | 久久久国产精品无码免费专区 | 国产无套粉嫩白浆在线 | 欧洲精品码一区二区三区免费看 | 精品水蜜桃久久久久久久 | 色五月丁香五月综合五月 | 性史性农村dvd毛片 | 久久精品国产一区二区三区肥胖 | 理论片87福利理论电影 | 亚洲狠狠婷婷综合久久 | a片在线免费观看 | 中文精品久久久久人妻不卡 | 无码国产乱人伦偷精品视频 | 无码人妻丰满熟妇区毛片18 | 亚洲人成网站免费播放 | 麻豆av传媒蜜桃天美传媒 | 丝袜人妻一区二区三区 | 中文字幕日产无线码一区 | 性史性农村dvd毛片 | 国产成人综合美国十次 | 天海翼激烈高潮到腰振不止 | 丝袜 中出 制服 人妻 美腿 | 女人和拘做爰正片视频 | 伊人久久大香线蕉av一区二区 | 久久精品视频在线看15 | 青青青手机频在线观看 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产激情无码一区二区app | 国产精品亚洲综合色区韩国 | 男人扒开女人内裤强吻桶进去 | 国产偷抇久久精品a片69 | 亚洲精品成人av在线 | 久久婷婷五月综合色国产香蕉 | 亚洲综合无码久久精品综合 | 爽爽影院免费观看 | 无码av最新清无码专区吞精 | 午夜精品一区二区三区在线观看 | 国产精品久久久久久亚洲毛片 | 99久久99久久免费精品蜜桃 | 亚洲va中文字幕无码久久不卡 | 国产精品久久久久久亚洲影视内衣 | 日韩视频 中文字幕 视频一区 | 人人妻人人澡人人爽欧美精品 | 日本一区二区三区免费高清 | 九月婷婷人人澡人人添人人爽 | 无套内谢的新婚少妇国语播放 | 日韩精品无码一本二本三本色 | 婷婷六月久久综合丁香 | 思思久久99热只有频精品66 | 国产成人一区二区三区在线观看 | 中文字幕乱码中文乱码51精品 | 天天拍夜夜添久久精品 | 一本久久a久久精品vr综合 | 狠狠色丁香久久婷婷综合五月 | aⅴ在线视频男人的天堂 | 亚洲人成人无码网www国产 | 少妇性荡欲午夜性开放视频剧场 | 国语自产偷拍精品视频偷 | 天天爽夜夜爽夜夜爽 | 一本色道久久综合亚洲精品不卡 | 日韩欧美中文字幕公布 | 色综合久久久久综合一本到桃花网 | 天堂在线观看www | 国产农村妇女高潮大叫 | 玩弄人妻少妇500系列视频 | 亚洲 a v无 码免 费 成 人 a v | 久久午夜无码鲁丝片午夜精品 | 亚洲 激情 小说 另类 欧美 | 国产精品久久福利网站 | 午夜精品一区二区三区在线观看 | 国产成人无码av片在线观看不卡 | 中文字幕+乱码+中文字幕一区 | 成人精品视频一区二区 | 国产精品视频免费播放 | 四虎永久在线精品免费网址 | 香蕉久久久久久av成人 | 色老头在线一区二区三区 | 欧美亚洲国产一区二区三区 | 国产口爆吞精在线视频 | 国产香蕉97碰碰久久人人 | 97久久国产亚洲精品超碰热 | 成人av无码一区二区三区 | 亚洲一区二区三区偷拍女厕 | 少妇厨房愉情理9仑片视频 | 国产无遮挡吃胸膜奶免费看 | 天天拍夜夜添久久精品 | 两性色午夜免费视频 | 女人被爽到呻吟gif动态图视看 | 综合激情五月综合激情五月激情1 | 老子影院午夜伦不卡 | 熟妇人妻激情偷爽文 | 国产人妻精品一区二区三区不卡 | 丝袜足控一区二区三区 | 国产精品香蕉在线观看 | 国产精品无套呻吟在线 | 午夜福利电影 | 久久99精品国产麻豆 | 亚洲人亚洲人成电影网站色 | 国产尤物精品视频 | 国产成人无码av一区二区 | 日韩精品无码一区二区中文字幕 | 日本高清一区免费中文视频 | 亚洲人成网站在线播放942 | 久久人人爽人人爽人人片ⅴ | 亚洲熟妇色xxxxx欧美老妇y | 乱码午夜-极国产极内射 | 131美女爱做视频 | 丰满少妇弄高潮了www | 少妇无码av无码专区在线观看 | 亚洲欧美日韩国产精品一区二区 | 中国女人内谢69xxxx | 亚洲码国产精品高潮在线 | 亚洲色大成网站www国产 | 天堂а√在线地址中文在线 | 久久国产精品偷任你爽任你 | 亚洲国产欧美国产综合一区 | 性欧美牲交xxxxx视频 | 国产真实夫妇视频 | 亚洲精品国产品国语在线观看 | 亚洲人成影院在线无码按摩店 | 极品尤物被啪到呻吟喷水 | 久久精品国产大片免费观看 | 天天摸天天透天天添 | 日日摸夜夜摸狠狠摸婷婷 | 最近免费中文字幕中文高清百度 | 中文精品久久久久人妻不卡 | 亚洲中文字幕在线无码一区二区 | 又紧又大又爽精品一区二区 | 日日碰狠狠丁香久燥 | 精品国产一区二区三区四区在线看 | 黑人巨大精品欧美黑寡妇 | 亚洲成色www久久网站 | 思思久久99热只有频精品66 | 午夜福利试看120秒体验区 | 亚洲小说春色综合另类 | 无码国模国产在线观看 | 精品无码国产自产拍在线观看蜜 | 人妻插b视频一区二区三区 | 亚洲天堂2017无码中文 | 亚洲国产高清在线观看视频 | 无码国模国产在线观看 | 国产性生交xxxxx无码 | 欧美熟妇另类久久久久久不卡 | 久久综合激激的五月天 | 成 人影片 免费观看 | 亚洲毛片av日韩av无码 | 日韩人妻少妇一区二区三区 | 色综合久久久久综合一本到桃花网 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 在线观看国产午夜福利片 | 男人和女人高潮免费网站 | 中文精品久久久久人妻不卡 | 国语精品一区二区三区 | 55夜色66夜色国产精品视频 | 国产香蕉97碰碰久久人人 | 大肉大捧一进一出视频出来呀 | 亚洲精品久久久久久一区二区 | 欧美丰满老熟妇xxxxx性 | 久久亚洲精品中文字幕无男同 | 又大又紧又粉嫩18p少妇 | 亚洲精品www久久久 | 亚洲日本在线电影 | 无遮挡国产高潮视频免费观看 | 欧洲精品码一区二区三区免费看 | 精品无码一区二区三区的天堂 | 亚洲欧美国产精品专区久久 | 无码av免费一区二区三区试看 | 欧美真人作爱免费视频 | 国产精品va在线观看无码 | 色妞www精品免费视频 | 国产亚洲日韩欧美另类第八页 | 中文字幕色婷婷在线视频 | 日韩人妻系列无码专区 | 性色欲情网站iwww九文堂 | 无码人妻丰满熟妇区毛片18 | 人妻夜夜爽天天爽三区 | 亚洲精品一区二区三区婷婷月 | 日韩在线不卡免费视频一区 | 亚洲人成网站免费播放 | 一本色道久久综合亚洲精品不卡 | 亚洲日本va中文字幕 | 国产无遮挡吃胸膜奶免费看 | 永久免费观看国产裸体美女 | 亚洲精品国偷拍自产在线观看蜜桃 | 18禁止看的免费污网站 |