【问题标题】:'??' is getting converted into '^' in Visual C++. Why is it happening and what is the way out?“???”正在转换为 Visual C++ 中的“^”。为什么会发生,出路是什么?
【发布时间】:2010-04-15 03:52:30
【问题描述】:

'??'如果我编译 mn VC++ 程序并运行它,则会转换为 '^'

例如

sprintf( ch, "??") 

打印出来

^

但如果我在 Turbo C/C++ 中运行相同的代码,就不存在这样的问题。为什么它会发生在 Windows 上的 VC++ 上?

【问题讨论】:

标签: c++ c visual-c++ turbo-c++


【解决方案1】:

?? 单独不是trigraph,尽管??' 对应于^

也许您在此处键入的内容与您在代码中的内容不同,并且您看不到字符串中的尾随单引号,因为它太靠近结束引号。

所以在代码中你可能有:

sprintf( ch, "??'");

【讨论】:

    【解决方案2】:

    您确定这是双引号而不是单引号吗?如果是??',那么您刚刚遇到了trigraph,这是really should be removed, but isn't due to IBM not migrating to UTF-8 from EBCDIC 的“功能”。 (当 C++0x 仍然开放以进行更改时,曾考虑移除三元组,但移除三元组的举动遭到 IBM 及其在 ISO C++ 委员会的代表的强烈阻止)。

    【讨论】:

      【解决方案3】:

      ?? 通常序列开始一个三元组,但序列“??”不是三元组,因此不应将其解释为 - 也许编译器中存在错误 - 您使用的是哪个版本,确切的代码是什么(包括变量声明)?

      此代码打印“??”如您所料,在 MSVC 6 到 VS 2010 的多个版本中:

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

      但是将snprintf()line 替换为:

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

      输出变为“'^”(VS 2010 除外)。

      快速测试显示 VS 2010 默认禁用三元组支持(它在第二次测试中打印出“'??'”)。在 VS 2010 中,您必须使用 /Zc:trigraphs 选项显式启用三字符支持。不错。

      有关什么是三元组的更多详细信息,请参阅:Purpose of Trigraph sequences in C++?

      【讨论】:

        猜你喜欢
        • 2011-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-02
        • 2017-09-04
        • 1970-01-01
        • 2021-05-07
        • 2012-09-10
        相关资源
        最近更新 更多