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.