Ejemplo de función StringCchCat

 C Programming >> Programación C >  >> Tags >> GCC
Ejemplo de función StringCchCat

StringCchCat se usa para concatenar una cadena a otra cadena. También es importante recordar que las funciones de Strsafe, como StringCchCopy() y StringCchCat(), no tienen la misma semántica que las funciones strncpy_s() y strncat_s(). Cuando strncat_s() detecta un error, establece la cadena de destino en una cadena nula mientras que StringCchCat() llena el destino con la mayor cantidad de datos posible y luego termina en nulo la cadena.

Operación :Concatena una cadena a otra cadena.

Sintaxis :

HRESULT StringCchCat(_Inout_ LPTSTR  pszDest,
                     _In_    size_t  cchDest,
                     _In_    LPCTSTR pszSrc
                    );

Argumentos :

  • pszDest :Búfer de destino al que se concatenará pszSrc.
  • cchDest :cch representa el conteo de caracteres. Este argumento se proporciona principalmente para que no escribamos después del final del búfer.
  • pszSrc :cadena terminada en nulo que desea concatenar.

Archivo de encabezado :

#include <strsafe.h>

Valor de retorno :

Type: HRESULT 
S_OK    If successful

También veremos los otros valores devueltos.

Código de muestra 1

Considere el ejemplo que se muestra a continuación:

#include "stdafx.h"
#include "stdlib.h"
#include "winerror.h"
#include "windows.h"
#include "strsafe.h"

int _tmain(int argc, _TCHAR* argv[])
{
 TCHAR pszDest[100]= _T("Hello");
 TCHAR pszSrc[100] = _T("World");
 HRESULT hresult;

 hresult = StringCchCat(pszDest, _countof(pszDest), pszSrc);

 if (SUCCEEDED(hresult))
 {
  printf("String Succesfully concatenated:%ls\n", pszDest);
 }
 else
 {
  printf("Concatenation Failed:%d\n", GetLastError());
 }
 return 0;
}

O/P:

String Successfully concatenated:HelloWorld

¿Qué sucede si paso 0 como segundo argumento en la función StringCchCat?

Código de muestra 2

Considere el ejemplo que se muestra a continuación:

#include "stdafx.h"
#include "stdlib.h"
#include "winerror.h"
#include "windows.h"
#include "strsafe.h"

int _tmain(int argc, _TCHAR* argv[])
{
 TCHAR pszDest[100]= _T("Hello");
 TCHAR pszSrc[100] = _T("World");
 HRESULT hresult;

 hresult = StringCchCat(pszDest, 0, pszSrc);

 if (SUCCEEDED(hresult))
 {
  printf("String Succesfully concatenated:%ls\n", pszDest);
 }
 else
 {
  if (hresult == STRSAFE_E_INVALID_PARAMETER)
   printf("Invalid Parameter Passed\n");
  else if(hresult == STRSAFE_E_INSUFFICIENT_BUFFER)
   printf("Destination Size not sufficient\n");
  else
   printf("Some unknown error happened\n");
 }
 return 0;
}

O/P:

Invalid Parameter Passed.

Entonces, cada vez que pase 0 como conteo, obtendrá el error STRSAFE_E_INVALID_PARAMETER. También haremos algunas modificaciones más para ver qué sucede cuando el tamaño del búfer de destino no es suficiente para agregar todo el contenido del búfer de origen.

Código de muestra 3

Considere el ejemplo que se muestra a continuación:

#include "stdafx.h"
#include "stdlib.h"
#include "winerror.h"
#include "windows.h"
#include "strsafe.h"

int _tmain(int argc, _TCHAR* argv[])
{
 TCHAR pszDest[8]= _T("Hello");
 TCHAR pszSrc[100] = _T("World");
 HRESULT hresult;

 hresult = StringCchCat(pszDest, _countof(pszDest), pszSrc);

 if (SUCCEEDED(hresult))
 {
  printf("String Succesfully concatenated:%ls\n", pszDest);
 }
 else
 {
  if (hresult == STRSAFE_E_INVALID_PARAMETER)
   printf("Invalid Parameter Passed\n");
  else if(hresult == STRSAFE_E_INSUFFICIENT_BUFFER)
   printf("Destination Size not sufficient\n");
  else
   printf("Some unknown error happened\n");
 }
 return 0;
}

O/P:

Destination Size not sufficient.

Si desea realizar una concatenación de cadenas en variables char en lugar de TCHAR, debe usar los argumentos de la función StringCchCatA (ANSI) que serán los mismos. Si desea realizar una concatenación de cadenas en las variables WCHAR, debe usar la función StringCchCatW (Unicode0).