c++ string mfc shfileoperation

c++ - Cadena doble terminada en nulo



string mfc (2)

Necesito formatear una cadena para que sea una cadena con doble terminación nula para usar SHFileOperation.

Una parte interesante es que encontré uno de los siguientes trabajando, pero no ambos:

// Example 1 CString szDir(_T("D://Test")); szDir = szDir + _T(''/0'') + _T(''/0''); // Example 2 CString szDir(_T("D://Test")); szDir = szDir + _T("/0/0"); //Delete folder SHFILEOPSTRUCT fileop; fileop.hwnd = NULL; // no status display fileop.wFunc = FO_DELETE; // delete operation fileop.pFrom = szDir; // source file name as double null terminated string fileop.pTo = NULL; // no destination needed fileop.fFlags = FOF_NOCONFIRMATION|FOF_SILENT; // do not prompt the user fileop.fAnyOperationsAborted = FALSE; fileop.lpszProgressTitle = NULL; fileop.hNameMappings = NULL; int ret = SHFileOperation(&fileop);

¿Alguien tiene idea sobre esto?

¿Hay alguna otra forma de agregar una cadena terminada en doble?


La clase CString en sí no tiene ningún problema con una cadena que contiene un carácter nulo. El problema es poner personajes nulos en la cadena en primer lugar. El primer ejemplo funciona porque agrega un solo carácter, no una cadena: acepta el carácter tal como está sin verificar si es nulo. El segundo ejemplo intenta anexar una cadena C típica, que por definición termina en el primer carácter nulo; de hecho está agregando una cadena vacía.


No puede usar CString para este propósito. Deberá usar su propio búfer char[] :

char buf[100]; // or large enough strcpy(buf, "string to use"); memcpy(buf + strlen(buf), "/0/0", 2);

Aunque podría hacerlo copiando un byte NUL más después del terminador NUL existente, preferiría copiar dos para que el código fuente refleje con mayor precisión la intención del programador.