2016-02-03 9 views
7

In una stringa letterale, come posso seguire immediatamente una sequenza esadecimale di escape con un carattere letterale che può essere interpretato come una cifra esadecimale? Ad esempio, se scrivo letterale ...Limitare la lunghezza di una sequenza di escape esadecimale in una stringa C

"BlahBlah\x04BlahBlah" 

... il 'B' immediatamente successivo alla '4' viene interpretato come parte della fuga esadecimale, perché è una cifra esadecimale valido.

Come posso scrivere una stringa letterale che rappresenta la stringa che quanto sopra rappresenterebbe se il '4' sono stati presi come ultimo carattere della fuga esadecimale?

+0

Si prega di mostrare il vostro sforzo di ricerca fino al tempo. Si prega di leggere prima la pagina [Ask]. –

+4

Probabilmente vorrai usare la litterale "BlahBlah \ x04" "BlahBlah" '. Il compilatore vede questo come una singola stringa ma la sequenza di escape si ferma a '4'. – SirDarius

+1

"* C considera tutti i caratteri che seguono un '\ x' in una stringa come numeri esadecimali *" quando si utilizza quale funzione, operatore, qualunque? Così com'è, è una "stringa" -literale e trattata come tale, e non come un valore esadecimale. – alk

risposta

10

Come avete notato, C è piuttosto stupido quando si tratta di sequenze di escape esadecimali in stringhe letterali. Fissarlo mediante concatenazione della stringa, in questo modo:

"BlahBlah\x04" "BlahBlah" 

È buona norma non avere alcun carattere finali dietro un tale sequenza esagono escape. Termina sempre la stringa come in questo esempio.

+2

Upvoted, ma in realtà non lo chiamerei * pre-processore * in quella fase di traduzione. – user694733

+0

@ user694733 Uuh giusto, che verrà mescolato con '##' che credo sia formalmente chiamato "concatenazione pre-processore". Io modifico – Lundin

+3

(Per coloro che hanno interesse per le fasi di traduzione, la pre-elaborazione è apparentemente fase 4, le sequenze di escape esadecimali vengono convertite nella fase 5 e la concatenazione letterale stringa viene eseguita nella fase 6. Il che spiega in realtà perché questo trucco funziona. .1.2 Fasi di traduzione: lì ho imparato anche qualcosa di nuovo!) – Lundin

Problemi correlati