'??' sta ottenendo convertito in '^' in Visual C ++. Perché accade e ciò che è la via d'uscita?
-
27-09-2019 - |
Domanda
'??' viene convertito in '^' se compilo mn VC ++ programma ed eseguirlo
es.
sprintf( ch, "??")
stampa fuori
^
Ma se corro lo stesso codice in Turbo C / C ++, non c'è nessun problema del genere. Perché accade sul VC ++ su Windows?
Soluzione
??
solo non è un trigraph , anche se ??'
corrisponde ^
.
Forse che è stata digitata qui diverso da quello che si ha nel codice e non è possibile vedere la singola citazione finale nella stringa perché è troppo vicino alla quotazione di chiusura.
Quindi, in codice, probabilmente avete:
sprintf( ch, "??'");
Altri suggerimenti
Sei sicuro che fosse un doppio preventivo e non un singolo-citazione? Se fosse ??', allora hai appena incontrato un trigraph , che è una " caratteristica" che in realtà dovrebbe essere rimosso, ma non è a causa di non IBM migrazione a UTF-8 da EBCDIC . (Trigrammi sono stati considerati per la rimozione quando C ++ 0x era ancora aperto per modifiche, ma la mossa per ottenere trigraphs rimossi stati violentemente bloccati da IBM e suoi rappresentanti nel comitato ISO C ++).
Il ??
solito sequenza inizia un trigraph, ma la sequenza "??" non è un trigraph quindi non dovrebbe essere interpretato come tale - forse c'è un bug nel compilatore -? esattamente quale versione stai usando, e qual è il codice esatto (tra cui le dichiarazioni delle variabili)
Questo codice stampa "??" in diverse versioni di MSVC 6 a VS 2010 come ci si potrebbe aspettare:
char ch[20];
sprintf( ch, "??");
printf( "%s\n", ch);
Ma sostituire il snprintf()
line con:
sprintf( ch, "'??'");
e l'uscita diventa "'^
" (tranne che in VS 2010).
Un rapido test mostra che il sostegno VS 2010 disabili trigraph di default (esso stampa "'??'
" nel 2 ° test). In VS 2010 è necessario attivare in modo esplicito sostegno trigraph utilizzando l'opzione /Zc:trigraphs
. Nizza.
Per ulteriori dettagli su ciò che trigrammi sono, vedi: di sequenze trigraph in C ++?