C ++ insertando wchar_t backslash en cadena

Tengo un ancho char literal:

const wchar_t* charSet = L" !\"#$%&'()*+,-./0123456789:;?\n" L"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\n" L"`abcdefghijklmnopqrstuvwxyz{|}~\n"; 

Cuando lo paso al procesador de texto ‘\’ (barra invertida) no está allí. Ahora si lo puse en su lugar \\

Estoy recibiendo error de tiempo de comstackción:

“falta la cita de cierre”

Entonces, ¿cómo pongo la barra invertida en una cadena de caracteres de este tipo?

En cuanto a tu código original

 L" !\"#$%&'()*+,-./0123456789:;<=>?\n" 

simplemente no pudo escapar del carácter de comillas " otra vez. Agregando otro \ obtendrá

 L" !\\"#$%&'()*+,-./0123456789:;<=>?\n" 

y el ahora sin escapar " cierra el literal en este punto. La próxima aparición de " abrirá un nuevo literal pero está desequilibrado, por lo que aparece el mensaje de error del comstackdor (puede detectar el efecto incluso en el marcado de código aquí). Necesitas agregar una \ para escapar de la " otra vez:

 L" !\\\"#$%&'()*+,-./0123456789:;<=>?\n" // ^^^ Fix this 

Pero administrar caracteres escapados entremezclados con \ barra invertida y " citar caracteres es bastante difícil de leer y mantener con los cambios.

Desde el último estándar ( c ++ 11 ) puede utilizar literales de cadena de caracteres en bruto :

 #include  #include  int main() { std::wstring ws(LR"del( !\"#$%&'()*+,-./0123456789:;<=>?)del" L"\n" LR"del(@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_)del" L"\n" LR"del(`abcdefghijklmnopqrstuvwxyz{|}~)del" L"\n"); std::wcout << ws; return 0; } 

Salida

  !\"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ `abcdefghijklmnopqrstuvwxyz{|}~ 

No es necesario escapar , ya ves.

Vea las muestras de trabajo aquí y aquí para los comstackdores que soportan los estándares actuales.