'??' Visual C ++で「^」に変換しつつあります。なぜそれが起こって、道アウトは何ですか?
-
27-09-2019 - |
質問
'??' IコンパイルMN VC ++プログラムとは、それを実行する場合は、「^」に変換します。
例えば。
sprintf( ch, "??")
出力します。
^
私はターボC / C ++で同じコードを実行する場合は、しかし、そのような問題はありません。なぜそれがWindows上でVC ++上で起こっているのでしょうか?
解決
単独??
ではないA 文字表記に、??'
に^
の対応するが
おそらく、あなたはここであなたは、コードを持っているものとは異なる、それをタイプして、それはあまりにも近く終了引用符のだから、あなたの文字列の末尾に単一引用符を見ることはできません。
だから、コードの中であなたはおそらく持っています:
sprintf( ch, "??'");
他のヒント
あなたは確かにそれは二重引用符ではなく単一引用符でしたか?それは??」だった場合、あなただけ」である、A トリグラフに遭遇しましたが本当に削除されますが、IBMによるものではないではないされなければならないという特徴」 EBCDICするからUTF-8への移行。 (トリグラフがC ++ 0xのがまだ変更のために開いたとき、除去のために考えられたが、動きが激しくIBMおよびISO C ++委員会で、その代表者によってブロックされた削除トリグラフを取得するために)。
??
通常のシーケンスはトリグラフを開始しますが、シーケンス「??」それは、そのようなものとして解釈すべきではないので、トリグラフではありません - 多分そこコンパイラのバグだ - ?まさにあなたはどのバージョンを使用していて、何が(変数宣言を含む)正確なコードです。
このコード印刷 "??" VS 2010年までMSVC 6のいくつかのバージョンではご想像通ります:
char ch[20];
sprintf( ch, "??");
printf( "%s\n", ch);
しかしでsnprintf()
lineを置き換えます:
sprintf( ch, "'??'");
出力は(VS 2010を除く) "'^
" となる。
デフォルトでは無効にVS 2010のトリグラフのサポートは(それが第二の試験で「'??'
」をプリントアウト)という簡単なテストを示しています。 VS 2010では、明示的/Zc:trigraphs
オプションを使用して文字表記のサポートを有効にする必要があります。ニースます。
トリグラフが何であるかの詳細については、以下を参照してください。C ++でのトライグラフ系列の目的? の