Partilhar via


Operações CString relativas a seqüências de caracteres de estilo C

Muitas vezes é útil para manipular o Sumário de um CString objeto sistema autônomo se fosse uma seqüência de caracteres terminada com caractere nulo do estilo C.Este artigo aborda os seguintes tópicos:

  • Convertendo em estilo C cadeias de caracteres terminada com caractere nulo

  • Trabalhando com padrão em time de execução biblioteca de funções de cadeia de caracteres

  • Modificando CString Sumário diretamente

  • Usar objetos CString com funções de argumento variável

  • Especificando parâmetros formais CString

Convertendo em estilo C terminada nulo strings

Considere os seguintes casos:

  • No caso mais simples, você pode converter um CString objeto deve ser um LPCTSTR. O operador de conversão de tipo LPCTSTR retorna um ponteiro para uma leitura estilo C seqüência terminada por caractere nulo de um CString objeto.

    O ponteiro retornado por LPCTSTR pontos para a área de dados usado pela CString. Se o CString sai do escopo e é automaticamente excluídas ou algo mais alterações o Sumário de CString, o LPCTSTR ponteiro não será válido. Trate a seqüência de caracteres para o qual o ponteiro aponta sistema autônomo temporário.

  • Você pode usar CString funções, sistema autônomo SetAt, para modificar caracteres individuais no objeto de seqüência de caracteres. No entanto, se você precisar de uma cópia de um CString caracteres do objeto que você pode modificar diretamente, use a função mais segura strcpy_s (ou Unicode/MBCS-portáteis _tcscpy_s) para copiar o CString objeto em um buffer separado no qual sistema autônomo caracteres podem ser com segurança modificados, conforme mostrado pelo seguinte exemplo:

    CString theString(_T("This is a test"));
    int sizeOfString = (theString.GetLength() + 1);
    LPTSTR lpsz = new TCHAR[sizeOfString];
    _tcscpy_s(lpsz, sizeOfString, theString);
    //... modify lpsz as much as you want   
    
    Observação:

    O terceiro argumento para strcpy_s (or the Unicode/MBCS-portable _tcscpy_s) is either a constwchar_t* (Unicode) or a constchar* (ANSI).O exemplo acima passa um CString para este argumento. O compilador do C++ aplica automaticamente a função de conversão definida para o CString classe que converte um CString para um LPCTSTR. A capacidade de definir operações de conversão de um tipo para outro é um dos recursos mais úteis do C++.

Trabalhando com funções de string de biblioteca em tempo de execução padrão

Na maioria das situações, será possível localizar CString funções de membro para executar qualquer operação para o qual você poderá considerar o uso padrão C em seqüência em time de execução sistema autônomo seqüência de caracteres de biblioteca funciona strcmp (ou Unicode/MBCS-portáteis _tcscmp).

Se você precisar usar as funções de seqüência de time de execução C, você pode usar as técnicas descritas Convertendo em estilo C terminada nulo strings para copiar o CString objeto para um buffer de cadeia de caracteres de estilo C equivalente, executar suas operações em buffer e, em seguida, atribuir a seqüência de caracteres de estilo C resultante de volta para um CString objeto.

Modificando CString Sumário diretamente

Na maioria das situações, você deve usar CString funções de membro para modificar o Sumário de um CString objeto ou para converter o CString a uma seqüência de caractere de estilo C.

No entanto, há certas situações, sistema autônomo trabalhar com funções de sistemas operacionais que requerem um buffer de caractere, onde é vantajoso para modificar diretamente o CString Sumário.

The GetBuffer e ReleaseBuffer funções de membro permitem acessar o buffer interno de caractere de um CString objeto e modificá-lo diretamente. As etapas a seguir mostram como usar essas funções para essa finalidade:

  1. De telefonarGetBuffer para um CString objeto e especificar o comprimento do buffer de que você precisar.

  2. Use o ponteiro retornado por GetBuffer escrever caracteres diretamente para o CString objeto.

  3. De telefonarReleaseBuffer para o CString objeto para atualizar todos sistema autônomo internos CString informações de estado, sistema autônomo o comprimento da seqüência de caracteres. Depois de modificar um CString Sumário do objeto diretamente, você deve telefonar ReleaseBuffer antes de telefonar ing qualquer Outros CString funções de membro.

Usando objetos CString com funções de argumento variável

Algumas funções C levar um número variável de argumentos.Um exemplo notável é printf_s. Por causa da maneira como esse tipo de função é declarado, o compilador não pode ter certeza do tipo dos argumentos e não pode determinar a operação de conversão para executar em cada argumento.Portanto, é essencial que você use um tipo explícito converter ao passar um CString objeto a uma função que assume um número variável de argumentos.

Para usar um objeto CString em uma função de argumento variável

  • Converter explicitamente o CString para um LPCTSTR seqüência de caracteres, sistema autônomo mostrado aqui:

    CString kindOfFruit = _T("bananas");
    int howmany = 25;
    _tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);    
    

Especificando parâmetros CString formal

A maioria das funções que precisam de um argumento de seqüência de caracteres, é melhor especificar o parâmetro formal em que o protótipo de função sistema autônomo um const ponteiro para um caractere (LPCTSTR) em vez de um CString. Quando um parâmetro formal é especificado sistema autônomo um const ponteiro para um caractere, você pode passar em um ponteiro para um TCHAR matriz, [uma seqüência de caracteres literal"hi there"], ou um CString objeto. The CString objeto será automaticamente convertido para um LPCTSTR. Qualquer lugar que você pode usar um LPCTSTR, você também pode usar um CString objeto.

You can also specify a formal parameter as a constant string reference (that is, constCString&) if the argument will not be modified.Solte o const modificador se a seqüência de caracteres será ser modificada pela função. Se um valor nulo padrão for desejado, inicializá-lo para a seqüência de caracteres nula ""], conforme mostrado abaixo:

void AddCustomer(const CString& name, const CString& address, 
   const CString& comment = _T(""));

Para a maioria dos resultados de função, você pode simplesmente retornar um CString objeto por valor.

Consulte também

Conceitos

CString argumento Passing

Outros recursos

Seqüências de caracteres (ATL/MFC)