'??' in Visual C in '^' umgewandelt ++ erhält. Warum passiert das und was ist der Ausweg?

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

  •  27-09-2019
  •  | 
  •  

Frage

'??' wird in ‚^‘ umgewandelt, wenn ich Kompilierung mn VC ++ Programm und führen Sie es

z.

sprintf( ch, "??") 

druckt

^

Aber wenn ich den gleichen Code in Turbo C / C ++ laufen, gibt es kein solches Problem. Warum geschieht es auf VC ++ unter Windows?

War es hilfreich?

Lösung

?? allein ist kein trigraph , obwohl ??' entspricht ^.

Vielleicht getippt Sie es hier anders aus, was Sie im Code haben, und Sie können die Hinter Apostroph in der Zeichenfolge nicht sehen, weil es auf den Schlusskurs zu nahe ist.

So in Code, den Sie wahrscheinlich haben:

sprintf( ch, "??'");

Andere Tipps

Sind Sie sicher, es ist ein doppeltes Anführungszeichen und keine einziges Anführungszeichen? Wenn es ??‘war, dann haben Sie gerade begegnet ein trigraph , die ein" Feature“, dass wirklich entfernt werden soll, ist aber aufgrund der IBM nicht nicht Migration auf UTF-8 von EBCDIC . (Trigraphen wurden zur Entfernung betrachtet, wenn C ++ 0x für Änderungen noch offen war, aber der Umzug trigraphs zu bekommen vehement blockiert von IBM und ihren Vertretern bei der ISO C ++ Ausschuss entfernt wurden).

Die ?? beginnt in der Regel eine Folge trigraph, aber die Sequenz „??“ kein trigraph ist, damit es nicht als solche interpretiert werden soll - vielleicht ein Fehler in dem Compiler gibt es - genau, welche Version verwenden Sie, und was ist der genaue Code (einschließlich Variablendeklarationen)

Dieser Code druckt "??" in mehreren Versionen von MSVC 6 bis VS 2010 wie man erwarten könnte:

char ch[20];
sprintf( ch, "??");
printf( "%s\n", ch);

Aber ersetzen die snprintf()line mit:

sprintf( ch, "'??'");

und der Ausgang wird "'^" (außer in VS 2010).

Ein Schnelltest zeigt, dass VS 2010 deaktiviert trigraph Unterstützung standardmäßig (es druckt „'??'“ im 2. Test). In VS 2010 Sie müssen explizit trigraph Unterstützung mit der /Zc:trigraphs Option aktivieren. Nizza.

Für weitere Informationen darüber, welche trigraphs sind, finden Sie unter: Zweck der Trigraph Sequenzen in C ++?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top