Gerenciamento de dados da cadeia de caracteres

O Visual C++ fornece várias maneiras de gerenciar dados de cadeia de caracteres:

  • Manipulação de cadeia de caracteres para trabalhar com cadeias de caracteres terminadas em NULL do estilo C

  • Funções de API do Win32 para gerenciar cadeias de caracteres

  • A CStringT Class da classe da MFC, que fornece objetos de cadeia de caracteres flexíveis e redimensionáveis

  • Classe CStringT Class, que fornece um objeto de cadeia de caracteres independente de MFC com a mesma funcionalidade que CString

Quase todos os programas funcionam com dados de cadeia de caracteres. A classe CString da MFC geralmente é a melhor solução para o tratamento flexível de cadeias de caracteres. A partir da versão 7.0, CString pode ser usado em programas de MFC ou independentes de MFC. A biblioteca de runtime e CString dão suporte às cadeias de caracteres que contêm caracteres multibyte (largos), como na programação Unicode ou MBCS.

Este artigo descreve os serviços de uso geral que a biblioteca de classes fornece relacionados à manipulação de cadeias de caracteres. Os tópicos abordados neste artigo incluem:

A classe CStringTClass fornece suporte para manipular cadeias de caracteres. Ela destina-se a substituir e estender a funcionalidade normalmente fornecida pelo pacote de cadeias de caracteres da biblioteca de runtime C. A classe CString fornece funções e operadores de membro para tratamento simplificado de cadeias de caracteres, semelhantes aos encontrados no Basic. A classe também fornece constructors e operadores para construir, atribuir e comparar CStrings e tipos de dados de cadeia de caracteres C++ padrão. Como CString não é derivado de CObjectvocê pode usar objetos CString independentemente da maior parte da biblioteca Microsoft Foundation Class (MFC).

Os objetos CString seguem a "semântica de valor". Um objeto CString representa um valor exclusivo. Pense em um CString como uma cadeia de caracteres real, não como um ponteiro para uma cadeia de caracteres.

Um objeto CString representa uma sequência de um número variável de caracteres. Os objetos CString podem ser considerados como matrizes de caracteres.

Portabilidade do Unicode e do MBCS Provide

Com a versão 3.0 da MFC e posteriores, a MFC, incluindo CString, está habilitado para conjuntos de caracteres Unicode e multibyte (MBCS). Esse suporte facilita a gravação de aplicativos portáteis que você pode criar para caracteres Unicode ou ANSI. Para habilitar essa portabilidade, cada caractere em um objeto CString é do tipo TCHAR, que será definido como wchar_t se você definir o símbolo _UNICODE ao compilar seu aplicativo ou como char se não fosse. Um caractere wchar_t tem 16 bits de largura. O MBCS será habilitado se você criar com o símbolo _MBCS definido. A MFC em si é criada com o símbolo _MBCS (para as bibliotecas NAFX) ou o símbolo _UNICODE (para as bibliotecas UAFX) definido.

Observação

Os exemplos CString nisso e nos artigos que acompanham as cadeias de caracteres mostram cadeias de caracteres literais formatadas corretamente para portabilidade Unicode, usando a macro _T, que converte a cadeia de caracteres literal na forma:

L"literal string"

Observação

que o compilador trata como uma cadeia de caracteres Unicode. Por exemplo, o código a seguir:

CString strName = _T("Name");   

Observação

será convertido como uma cadeia de caracteres Unicode se _UNICODE for definido ou como uma cadeia de caracteres ANSI, se não for. Para obter mais informações, confira o artigo Suporte ao MBCS (Conjunto de Caracteres Multibyte) e ao Unicode.

Um objeto CString pode armazenar até INT_MAX (2.147.483.647) caracteres. O tipo de dados TCHAR é usado para obter ou definir caracteres individuais dentro de um objeto CString. Ao contrário das matrizes de caracteres, a classe CString tem uma funcionalidade de alocação de memória interna. Isso permite que os objetos CString cresçam automaticamente conforme necessário (ou seja, você não precisa se preocupar com o crescimento de um objeto CString para se ajustar a cadeias de caracteres mais longas).

CStrings e const char ponteiros

Um objeto CString também pode agir como uma cadeia de caracteres literal no estilo C (um PCXSTR, que é o mesmo que const char* se não estivesse sob Unicode). O operador de conversão CSimpleStringT::operator PCXSTR permite que os objetos CString sejam substituídos livremente por ponteiros de caractere em chamadas de função. O constructor CString(LPCWSTR pszSrc) permite que ponteiros de caractere sejam substituídos por objetos CString.

Nenhuma tentativa é feita para dobrar objetos CString. Se você fizer dois objetos CString contendo Chicago, por exemplo, os caracteres em Chicago serão armazenados em dois lugares. (Isso pode não ser verdadeiro para versões futuras da MFC, portanto, você não deve depender disso.)

Observação

Use as funções membro CSimpleStringT::GetBuffer e CSimpleStringT::ReleaseBuffer quando precisar acessar diretamente um CString como ponteiro não compatível com um caractere.

Observação

Use as funções de membro CStringT::AllocSysString e CStringT::SetSysString para alocar e definir objetos BSTR usados na Automação (anteriormente conhecida como Automação OLE).

Observação

Sempre que possível, aloque objetos CString no quadro em vez de no heap. Isso salva a memória e simplifica a passagem de parâmetros.

A classe CString não é implementada como uma classe de coleção da biblioteca Microsoft Foundation Class, embora os objetos CString certamente possam ser armazenados como elementos em coleções.

Contagem de referências CString

A partir da versão 4.0 da MFC, quando objetos CStringT Class são copiados, a MFC incrementa uma contagem de referências em vez de copiar os dados. Isso torna mais eficiente a passagem de parâmetros por valor e o retorno de objetos CString por valor. Essas operações fazem com que o construtor de cópia seja chamado, às vezes, mais de uma vez. Incrementar uma contagem de referência reduz essa sobrecarga para essas operações comuns e torna o uso de CString uma opção mais atraente.

À medida que cada cópia é destruída, a contagem de referência no objeto original é decrementada. O objeto original CString não será destruído até que sua contagem de referência seja reduzida a zero.

Você pode usar as funções de membro CStringCSimpleStringT::LockBuffer e CSimpleStringT::UnlockBuffer para desabilitar ou habilitar a contagem de referências.

Confira também

Tópicos gerais do MFC