|
Страници по тази тема: 1 | 2 | 3 | 4 | (покажи всички)
Тема
|
Интересен номер на CString
|
|
Автор |
Pekoнcтpykтop (Нерегистриран) |
Публикувано | 11.03.05 12:25 |
|
_AFX_INLINE TCHAR CString::operator[](int nIndex) const
{
// same as GetAt
ASSERT(nIndex >= 0);
ASSERT(nIndex < GetData()->nDataLength);
return m_pchData[nIndex];
}
Това хубаво, ама nDataLength не включва терминиращата нула. В резултат, една проверка от рода на str[0] == 0, която си е напълно логична и често използвана, гърми на поразия.
| |
|
ASSERT(nIndex < GetData()->nDataLength);
| |
|
До сега не съм виждал функция за низове да брои нулата. Всички броят брой символи без 0 терминиращата нула. Нямаш право да достъпваш елементът с терминиращата нула.
Какво наричаш една проверка от рода на str[0]?
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
|
Що пък да нямам право?? Буфера е дължината на стринга + 1 по дефиниция, т.е. ако указателя е валиден, задължително има поне 1 символ дължина. В това се заключава идеята за проверка на празен стринг - ако първия символ е нула, значи е празен.
| |
|
Ако искаш да работиш с буфера си има специални функции за работа с буфер. Ти тука работиш с класа и там хората ако искат могат да си нямат изоставаща нула даже.
Начи аз не разбирам мноо от MFC, ма първото което се сещам е, че имат оператор за z-string. Демек вместо
str[0]
моеш да си пишеш
*static_cast<TCHAR*>(str)
Редакция:
*static_cast<LPCTSTR>(str)
Ей затова мразя C-cast, щото е много силен и с него тва дето го бех написал щеше да мине.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_Редактирано от Colombino на 11.03.05 15:54.
| |
Тема
|
Re: Интересен номер на CString
[re: Pekoнcтpykтop]
|
|
Автор | Paдo (Нерегистриран) |
Публикувано | 11.03.05 16:18 |
|
Ако искаш да ръчкаш вътрешностите на CString-a - CString::GetBuffer/CString::ReleaseBuffer.
Иначе културния начин е GetLength и IsEmpty.
| |
|
Абе как без нула, CString официално енкапсулира ANSI стринг.
| |
|
хората са сложили IsEmpty() за тая проверка
| |
Тема
|
Re: Много правилно
[re: Pekoнcтpykтop]
|
|
Автор | д (Нерегистриран) |
Публикувано | 11.03.05 18:20 |
|
Като нещеш да ползваш класове и функции от рода на IsEmpty що ползваш С++ а не минеш на С?
| |
Тема
|
Re: Много правилно
[re: Pekoнcтpykтop]
|
|
Автор | zaphod (Нерегистриран) |
Публикувано | 11.03.05 18:30 |
|
не и през оператора [], ако искаш да достъпваш нулата, тогава първо кастни към LPCSTR и тогава слагай [], би трябвало да стане, макар че ме мързи да го пробвам.
| |
|
Страници по тази тема: 1 | 2 | 3 | 4 | (покажи всички)
|
|
|