string manipulation question
-
when is it ok to do pch++ and when should you use CharNext/_tcsinc? I'm guessing pch++ is fine for ansi char* and unicode TCHAR* for english, so do you use CharNext/_tcsinc for programs that will have text in a non-english encoding, a non-western european encoding? - thanks
-
when is it ok to do pch++ and when should you use CharNext/_tcsinc? I'm guessing pch++ is fine for ansi char* and unicode TCHAR* for english, so do you use CharNext/_tcsinc for programs that will have text in a non-english encoding, a non-western european encoding? - thanks
pch++ can be used for WCHAR* or, if you know the string is using a code page in which there are no multi-byte chars (e.g., English, Spanish, French), for char* too. CharNext or _tcsinc are used when you want to write code that can be used, whithout changes, either for SBCS, MBCS, or Unicode builds. For example, the following code:
_TCHAR buffer[] = _T("This is a test");
int nLen = 0;
for (const _TCHAR* pch = buffer; *pch; pch = _tcsinc(pch))
{
nLen++;
}gets expanded as follows:
// SBCS (when neither _MBCS nor _UNICODE are defined)
char buffer[] = "This is a test";
int nLen = 0;
for (const char* pch = buffer; *pch; pch = _strinc(pch))
{
nLen++;
}// UNICODE (when _UNICODE is defined)
wchar_t buffer[] = L"This is a test";
int nLen = 0;
for (const wchar_t* pch = buffer; *pch; pch = _wcsinc(pch))
{
nLen++;
}// MBCS (when _MBCS is defined)
char buffer[] = "This is a test";
int nLen = 0;
for (const char* pch = buffer; *pch; pch = _mbsinc(pch))
{
nLen++;
}See also: A Sample Generic-Text Program[^] -- jlr http://jlamas.blogspot.com/[^]
-
pch++ can be used for WCHAR* or, if you know the string is using a code page in which there are no multi-byte chars (e.g., English, Spanish, French), for char* too. CharNext or _tcsinc are used when you want to write code that can be used, whithout changes, either for SBCS, MBCS, or Unicode builds. For example, the following code:
_TCHAR buffer[] = _T("This is a test");
int nLen = 0;
for (const _TCHAR* pch = buffer; *pch; pch = _tcsinc(pch))
{
nLen++;
}gets expanded as follows:
// SBCS (when neither _MBCS nor _UNICODE are defined)
char buffer[] = "This is a test";
int nLen = 0;
for (const char* pch = buffer; *pch; pch = _strinc(pch))
{
nLen++;
}// UNICODE (when _UNICODE is defined)
wchar_t buffer[] = L"This is a test";
int nLen = 0;
for (const wchar_t* pch = buffer; *pch; pch = _wcsinc(pch))
{
nLen++;
}// MBCS (when _MBCS is defined)
char buffer[] = "This is a test";
int nLen = 0;
for (const char* pch = buffer; *pch; pch = _mbsinc(pch))
{
nLen++;
}See also: A Sample Generic-Text Program[^] -- jlr http://jlamas.blogspot.com/[^]