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

StringBuilder出错-未附加字符串

  •  0
  • bobber205  · 技术社区  · 15 年前

    使用长字符串并发现此问题。有什么建议吗?

    我有一个实例,其中一个字符串生成器的容量是1024,长度是992。

    I am.Append()一个.Length属性为1024的字符串。

    在调用.Append()之后,.ToString()方法返回一个长的“\0\0\0”字符串。

    怎么回事?0.0个

    如果我创建一个新的StringBuilder对象,然后追加,我就得到了我所期望的。所以这个字符串“应该”没问题吧?

    (我正在通过执行.Remove(0,LengthofSB)技巧清除stringbuilder)。

    有什么想法吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Jon Skeet    15 年前

    在我看来 StringBuilder 是“\0\0\0\0\0…”,这就是你看到的-如果你能看到字符串的末尾,你会看到你真正的数据。

    当各种Windows控件将“\0”视为字符串终止字符时,它们会截断它,这就加剧了这种情况。

    如果你有一个简短但完整的程序来证明这个问题,我们可以证实我的怀疑。

        2
  •  0
  •   K Singh    15 年前

    尽我所能从这个问题中找出答案,我试着运行下面的代码。没有上面提到的字符串“\0\0\0”,它工作得很好。我已经把代码贴在下面了。请注意,因为你没有提供你是怎么做的,我只是认为你在尝试这样的事情。另外,我正在创建两个1024字符串,其中一个字符串包含“a”和其他“b”,并将它们连接到第一个stringbuilder对象中。它工作得很好。

    StringBuilder sb1 = new StringBuilder(1024);
    for (int i = 0; i < 992; i++)
        sb1.Append('a');
    Console.WriteLine(sb1.ToString());
    Console.WriteLine("{0}",sb1.Length);
    
    StringBuilder sb2 = new StringBuilder();
    for (int i = 0; i < 1024; i++)
        sb2.Append('b');
    Console.WriteLine(sb2.ToString());
    Console.WriteLine("{0}",sb2.Length);
    
    sb1.Append(sb2.ToString());
    Console.WriteLine(sb1.ToString());
    Console.WriteLine("{0}",sb1.Length);