'??' sta ottenendo convertito in '^' in Visual C ++. Perché accade e ciò che è la via d'uscita?

StackOverflow https://stackoverflow.com/questions/2642618

  •  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?

È stato utile?

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 ++?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top