Operações de CString sobre as cadeias de caracteres ctype de Estilo
Um objeto de CString contém dados de cadeia de caracteres.CString herda o conjunto de métodos e operadores que é definido no modelo CStringT da classe para trabalhar com dados de cadeia de caracteres.(CString é typedef que especializa CStringT para trabalhar com o tipo de dados de caractere que CString suporta.)
CString não armazena dados de caractere internamente como se AC - cadeia de caracteres NULL- finalizada estilo.Em vez de isso, CString controla o comprimento de dados de caractere para que ele possa ser mais segurança os dados e o espaço que requer.
CString aceita cadeias de caracteres ctype de estilo, e fornece maneiras para acessar dados de caractere como se AC - estilize a cadeia de caracteres.Este tópico contém as seções que explicam como usar um objeto de CString como se fosse energia AC - cadeia de caracteres NULL- finalizada estilo.
Convertendo em cadeias de caracteres NULL- terminadas C de estilo
Trabalhar com papéis padrão da cadeia de caracteres de biblioteca em tempo de execução
Conteúdo de CString diretamente
Usando objetos de CString com funções de argumentos variáveis
Especificando parâmetros formais de CString
Usando CString como se AC - o estilo NULL- Finalizou a cadeia de caracteres
Para usar um objeto de CString como se AC - estilize a cadeia de caracteres, converte o objeto a LPCTSTR.Em o exemplo, CString retorna um ponteiro C de estilo somente leitura para uma cadeia de caracteres NULL- finalizada.A função de strcpy coloca uma cópia da cadeia de caracteres ctype de estilo em myStringvariável.
CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aString);
Você pode usar métodos de CString , por exemplo, SetAt, para alterar caracteres individuais no objeto de cadeia de caracteres.Em o entanto, o ponteiro de LPCTSTR é temporário e se torna inválida quando qualquer alteração é feita para CString.CString também pode sair de escopo e automaticamente ser excluído.Recomendamos que você obtém um ponteiro atualizado de LPCTSTR de um objeto de CString sempre que você use um.
A as vezes você pode exigir uma cópia de dados de CString modificar diretamente.Use a função mais protegida strcpy_s (ou o Unicode/MBCS-portable _tcscpy_s) para copiar o objeto de CString em um buffer separados.Isso é onde os caracteres com segurança podem ser alterados, como mostrado no exemplo a seguir.
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 (ou o Unicode/MBCS-portable _tcscpy_s) é constwchar_t* (Unicode) ou constchar* (ANSI).Passa acima do exemplo CString para esse argumento.O compilador C++ automaticamente aplica a função de conversão definida para a classe de CString que converte CString a LPCTSTR.A capacidade de definir operações de conversão de um tipo para outro é um dos recursos mais úteis C++. |
Trabalhar com papéis padrão da cadeia de caracteres de biblioteca em tempo de execução
Você deve ser capaz de localizar um método de CString para executar qualquer operação de cadeia de caracteres para que você possa ver usar as funções padrão da cadeia de caracteres de biblioteca em tempo de execução de C como strcmp (ou o Unicode/MBCS-portable _tcscmp).
Se você deve usar as funções de cadeia de caracteres em tempo de execução de C, você pode usar as técnicas descritas em Convertendo em cadeias de caracteres NULL- Terminadas C de Estilo_core_using_cstring_as_a_c.2d.style_null.2d.terminated_string.Você pode copiar o objeto de CString a um buffer equivalente de cadeia de caracteres ctype de estilo, executa as operações no buffer, e então designa a cadeia de caracteres resultante ctype -- estilo de volta a um objeto de CString .
Conteúdo de CString diretamente
Em a maioria das situações, você deve usar funções de membro de CString para modificar o conteúdo de um objeto de CString ou para converter CString a energia AC - estilize a cadeia de caracteres.
Há algumas situações onde faz sentido modificar diretamente o conteúdo de CString , por exemplo, quando você trabalha com funções do sistema operacional que exigem um buffer de caracteres.
Acesso oferecem os métodos de GetBuffer e de ReleaseBuffer ao buffer interno de caracteres de CString objeta-o e deixa- modificá-lo diretamente.As etapas a seguir mostram como usar essa finalidade essas funções.
Para usar GetBuffer e ReleaseBuffer para acessar o buffer interno de caracteres de um objeto CString
Chame GetBuffer para um objeto de CString e especificar o tamanho do buffer que você precisa.
Use o ponteiro retornado por GetBuffer para escrever caracteres diretamente no objeto de CString .
Chame ReleaseBuffer para o objeto de CString para atualizar todas as informações do estado dentro de CString , por exemplo, o comprimento da cadeia de caracteres.Depois que você altera o conteúdo de CString objeto diretamente, você deve chamar ReleaseBuffer antes de chamar quaisquer outras funções de membro de CString .
Usando objetos de CString com funções de argumentos variáveis
Algumas funções de As recebem um número variável de argumentos.Um exemplo é printf_smarcantes.Por causa da maneira como esse tipo de função é declarado, o compilador não pode ter certeza do tipo de argumentos e não pode determinar qual operação de conversão para executar em cada argumento.Portanto, é essencial que você usa uma conversão de tipos explícita para passar um objeto de CString a uma função que recebe um número variável de argumentos.
Para usar um objeto de CString em uma função argument variável, converter explicitamente CString a uma cadeia de caracteres de LPCTSTR , conforme mostrado no exemplo o seguir.
CString kindOfFruit = _T("bananas");
int howmany = 25;
_tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);
Especificando parâmetros formais de CString
Para a maioria das funções que precisam um argumento de cadeia de caracteres, é melhor especificar o parâmetro formal no protótipo de função como um ponteiro de const a um caractere (LPCTSTR) em vez de CString.Quando um parâmetro tipo é especificado como um ponteiro de const a um caractere, você pode passar um ponteiro para uma matriz de TCHAR , como uma cadeia de caracteres literal ["hi there"], ou um objeto de CString.o objeto de CString será convertido automaticamente a LPCTSTR.Qualquer localidade que você pode usar LPCTSTR, você também pode usar um objeto de CString .
Você também pode especificar um parâmetro formal como uma referência constante de cadeia de caracteres (isto é, constCString&) se o argumento não será alterado.Solte o modificador de const se a cadeia de caracteres será modificada pela função.Se um valor nulo padrão é desejado, inicializa-o para a cadeia de caracteres nula [""], como mostrado abaixo:
void AddCustomer(const CString& name, const CString& address,
const CString& comment = _T(""));
Para a maioria de resultados de funções, você pode simplesmente retornar um objeto de CString por valor.
Consulte também
Conceitos
Passagem de argumentos de CString