代码之家  ›  专栏  ›  技术社区  ›  JohnIdol

C奎因问题

  •  5
  • JohnIdol  · 技术社区  · 16 年前

    我试图理解这段自复制代码是如何工作的(发现 here 但是问题是我不能让它运行 原样 :

    class c {
        static void Main(){
    
            string s = "class c{{static void Main(){{string s={0}{10};System.Console.Write(s,(char)34,s);}}}}";
    
            System.Console.Write(s,(char)34,s); //<<-- exception on this line
    
        }
    }
    

    它在writeline上引发了一个异常: 索引(基于零)必须大于或等于零且小于参数列表的大小。

    有人能帮忙吗?尤其是关于格式化选项0 10?

    我让它像这样工作(见下文),但它比原版长-我很好奇原版如何能像第一个位置那样工作:

    class c {
        static void Main(){
    
            string s = "class c{{static void Main(){{string s={0}{1}{2};System.Console.Write(s,(char)34,s,(char)34);}}}}";
    
            System.Console.Write(s,(char)34,s,(char)34);
        }
    }
    
    3 回复  |  直到 16 年前
        1
  •  10
  •   Bojan Resnik    16 年前

    我想是少了一对牙套,而不是 {10} 它应该阅读 {1}{0} .

    class c {
        static void Main(){
    
            string s = "class c{{static void Main(){{string s={0}{1}{0};System.Console.Write(s,(char)34,s);}}}}";
    
            System.Console.Write(s,(char)34,s); //<<-- exception on this line
    
        }
    }
    
        2
  •  5
  •   rsp    16 年前

    最初的作品能用吗?

    s={0}{1}{0}
    
        3
  •  4
  •   Guffa    16 年前

    我相信原版应该是这样的:

    class c {
      static void Main() {
        string s = "class c{{static void Main(){{string s={0}{1}{0};System.Console.Write(s,(char)34,s);}}}}";
        System.Console.Write(s, (char)34, s);
      }
    }
    

    {0}{10} 应该改成 {0}{1}{0} .

    这个 {0} 在格式中,字符串用于在字符串前后放置引号。