Partilhar via


Gestão de Dados de Cadeias

Observação

A biblioteca Microsoft Foundation Classes (MFC) e a Active Template Library (ATL) continuam a ser suportadas. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

O Visual C++ fornece várias formas de gerir dados de cadeias:

  • Manipulação de cordas para trabalhar com cordas terminadas no estilo NULLC

  • Funções da API Win32 para gestão de strings

  • Class do CStringT MFC, que fornece objetos de string flexíveis e redimensionáveis

  • ClassCStringT Class, que fornece um objeto string independente de MFC com a mesma funcionalidade queCString

Quase todos os programas trabalham com dados em cadeia de caracteres. A classe da CString MFC é frequentemente a melhor solução para manuseamento flexível das cordas. A partir da versão 7.0, CString pode ser usado em programas MFC ou independentes de MFC. Tanto a biblioteca em tempo de execução como CString as cadeias de suporte contêm caracteres de vários bytes (largos), como na programação Unicode ou MBCS.

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

A CStringT classe Class fornece suporte para manipular cadeias. Destina-se a substituir e expandir a funcionalidade normalmente fornecida pelo pacote de cadeias de biblioteca em tempo de execução C. A CString classe fornece funções e operadores membros para uma manipulação simplificada das cadeias, semelhante às encontradas no Basic. A classe também fornece construtores e operadores para construir, atribuir e comparar CStrings e tipos de dados padrão de string em C++. Como CString não deriva de CObject, podes usar CString objetos independentemente da maioria da Microsoft Foundation Class Library (MFC).

CString os objetos seguem a "semântica de valores." Um CString objeto representa um valor único. Pensa em a CString como uma cadeia real, não como um apontador para uma cadeia.

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

Unicode e MBCS proporcionam portabilidade

Com a versão 3.0 do MFC e posteriores, o MFC, incluindo CString, está ativado tanto para conjuntos de caracteres Unicode como multibyte (MBCS). Este suporte facilita a escrita de aplicações portáteis que pode construir para caracteres Unicode ou ANSI. Para permitir esta portabilidade, cada carácter num CString objeto é do tipo TCHAR, que é definido como wchar_t se definisse o símbolo _UNICODE ao construir a sua aplicação, ou como char se não o fizesse. Um wchar_t carácter tem 16 bits de largura. O MBCS está ativado se construíres com o símbolo _MBCS definido. O próprio MFC é construído com o _MBCS símbolo (para as bibliotecas NAFX) ou o _UNICODE símbolo (para as bibliotecas UAFX) definidos.

Observação

Os CString exemplos neste e nos artigos acompanhantes sobre strings mostram strings literais devidamente formatadas para portabilidade Unicode, usando a _T macro, que traduz a string literal para a forma:

L"literal string"

Observação

que o compilador trata como uma cadeia Unicode. Por exemplo, o seguinte código:

CString strName = _T("Name");   

Observação

é traduzida como uma cadeia Unicode se _UNICODE estiver definida ou como uma cadeia ANSI se não. Para mais informações, consulte o artigo Suporte ao Unicode e ao Conjunto de Caracteres Multibyte (MBCS).

Um CString objeto pode armazenar até INT_MAX (2.147.483.647) caracteres. O TCHAR tipo de dado é usado para obter ou definir caracteres individuais dentro de um CString objeto. Ao contrário dos arrays de caracteres, a CString classe possui uma capacidade incorporada de alocação de memória. Isto permite CString que os objetos cresçam automaticamente conforme necessário (ou seja, não tens de te preocupar em fazer um CString objeto crescer para encaixar em sequências mais longas).

CStrings e const char Ponteiros

Um objeto também pode funcionar como uma cadeia literal ao estilo C (um PCXSTR, que é o mesmo queconst char*, se não for CString sob Unicode). O CSimpleStringT::operator PCXSTR operador de conversão permite CString que objetos sejam livremente substituídos por apontadores de carácter nas chamadas de funções. O CString(LPCWSTR pszSrc) construtor permite substituir CString os objetos por ponteiros de carácter.

Não se tenta dobrar CString objetos. Se fizeres dois CString objetos contendo Chicago, por exemplo, os caracteres em Chicago são armazenados em dois lugares. (Isto pode não ser verdade para futuras versões do MFC, por isso não deve depender disso.)

Observação

Usa as CSimpleStringT::GetBuffer funções e CSimpleStringT::ReleaseBuffer membro quando precisares de aceder diretamente a CString como um ponteiro não constante para uma personagem.

Observação

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

Observação

Sempre que possível, aloque CString objetos na estrutura em vez de no heap. Isto poupa memória e simplifica a passagem de parâmetros.

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

CString Contagem de Referências

A partir da versão 4.0 do MFC, quando CStringT os objetos Class são copiados, o MFC incrementa uma contagem de referências em vez de copiar os dados. Isto torna mais eficiente a passagem de parâmetros por valor e a devolução CString de objetos por valor. Estas operações fazem com que o construtor de cópias seja chamado, por vezes mais do que uma vez. Incrementar uma contagem de referência reduz esse sobrecusto para estas operações comuns e torna a utilização CString uma opção mais atrativa.

À medida que cada cópia é destruída, a contagem de referências no objeto original é diminuída. O objeto original CString não é destruído até que o seu número de referências seja reduzido a zero.

Podes usar as CString funções CSimpleStringT::LockBuffer dos membros e CSimpleStringT::UnlockBuffer desativar ou ativar a contagem de referências.

Consulte também

Tópicos gerais do MFC