2017-02-20 20 views
0

私はこの厄介な機能/バグを発見しました。次のような末尾のスペースを持つ文字列があると仮定します。テキストボックスとリッチテキストボックスの残りの文字を削除するヌル文字

スペースの量は異なる場合があります。そこで、開始タグと終了タグで囲まれたTextBoxに表示して、その変化の様子を見てみましょう。完全に動作します。

textBox1.Text = $"BEGIN#{value}#END"; 

しかし、この値は、このような終わり\0ヌル文字を追加するのが好き私を送ってデバイス:

string value = "someValue " + Convert.ToChar(0x00); 

と私は同じ方法でそれを表示しよう:

textBox1.Text = $"BEGIN#{value}#END; 

この結果、#ENDタグが消滅します。 同じ現象がRichTextBoxで発生します。

enter image description here

質問: はなぜヌル文字が文字列の残りの部分を食べる/殺すのか? 文字列のchar配列の終わりと解釈されるのは、CまたはC++のようですか?

+0

これは、Windowsのコントロールが一般的にどのように動作するかを示します。はい、それはCやC++のようなものです。あなたのデバイスは明らかに、あなたが尊重しなければならない一般的に受け入れられたターミネータとして ''0 ''を置きます。 – GSerg

+0

'value = value.TrimEnd( '\ 0')'? – spender

+0

@GSerg私のデバイスは残念なことにバグとしてそれを置きます。だから私はちょうど調整し、それを削除するために世話をしていると思います。 –

答えて

1

CおよびC++などの一部の言語では、ヌル文字は文字列の末尾を示します。 .NET Frameworkでは、文字列にnull文字を埋め込むことができます。文字列に1つ以上のヌル文字が含まれている場合、それらは合計文字列の長さに含まれます。たとえば、次の文字列では、部分文字列 "abc"と "def"はヌル文字で区切られています。 Lengthプロパティは7を返します。これは、6文字のアルファベット文字とヌル文字を含むことを示します。

using System; 
using System.Text; 

public class StringClassTest 
{ 
    public static void Main() 
    { 
     string characters = "abc\u0000def"; 
     Console.WriteLine(characters.Length); // Displays 7 
    } 
} 
関連する問題