2009-12-30 63 views
0

使用長字符串並發現此問題。有什麼建議?StringBuilder錯誤 - 字符串未被佔用

我有這樣的情況:一個字符串生成器的容量爲1024和長度992

我.Append(),有1024

一個。長度屬性.Append後的字符串()被調用,.ToString()方法返回一個長的「\ 0 \ 0 \ 0」字符串。

這是怎麼回事? 0.o

如果我創建一個新的StringBuilder對象,然後追加,我得到了我所期望的。所以字符串「應該」沒問題吧?

(我通過執行.Remove(0,LengthofSB)技巧來清除字符串生成器)。

任何想法?

+12

得到任何代碼可以分享?你的問題沒問題,但不容易遵循。 – santosc

+2

請發佈導致問題的實際代碼片段... –

回答

3

這聽起來像StringBuilder中的原始數據是「\ 0 \ 0 \ 0 \ 0 \ 0 ...」,這就是你所看到的 - 如果你能看到字符串的末尾,你會看到你的真實數據。

當各種Windows控件將「\ 0」視爲字符串終止字符時,它們會被截斷。

如果您有一個簡短但完整的程序來演示問題,我們可以證實我的懷疑。

0

盡我所能從問題中弄出來,我試着運行下面的代碼。它工作正常,沒有上面提到的字符串「\ 0 \ 0 \ 0」。我已經發布了下面的代碼。請注意,因爲你沒有提供你如何做,我只是覺得你正在嘗試這樣的事情。另外,我只是創建了兩個字符串1024,其中一個字符串中包含'a'和其他'b',並將它們加入到第一個字符串對象中。它工作得很好。

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); 
相關問題