web-dev-qa-db-ja.com

C#-「\ 0」は何に相当しますか?

私は Pex で遊んでおり、それが私のメソッドに渡すパラメータの1つは"\0"

どういう意味ですか?私の推測は空の文字列("")私のメソッドの内容に基づいています。ただし、同じ場合は、"" の代わりに "\0"

誰か知ってる?

21
Vaccano

'\ 0'は " null文字 "です。 CおよびC++の一部で文字列を終了するために使用されます。 Pexは、コードがどのようにnull文字を処理するかを確認するためのテストを行っており、おそらく Poison Null Byte セキュリティエクスプロイトを探しています。

ほとんどのC#コードには、恐れることは何もありません。ただし、文字列をアンマネージコードに渡すと、問題が発生する可能性があります。

編集:

明確にするために... Pexはnull文字を含む文字列を渡しています。これはnull参照ではありません

39
Randolpho

これは、文字「\ 0」を含む文字列です。 C#はこれを特別な方法で処理しません。これは、Unicode文字U + 0000です。あなたが書く場合:

int firstCodePoint = text[0];

firstCodePointが0であることがわかります。

5
Jon Skeet

ヌル文字の文字列です。 Cまたは以前のC++ライブラリで使用されていたような古い文字列ライブラリは、文字列の終わりを示すために '\ 0'文字を使用していました。

.Netのような新しい環境では別のシステムを使用しますが、 '\ 0'で文字列を終了することには多くの歴史があり、それが一般的なエラーの原因となります。 Pexのようなテストライブラリは、プログラムが正しく処理することを確認するためにそれを使用します。

3
Joel Coehoorn
Escape Sequence  
\0    
Character Name 
Null    
Unicode Encoding     
0x0000

このリンクを参照してください。

2
Zoba

文字\ u0000(別名NUL)を含む長さ1のストリング。この文字は特別に扱われません。

文字列の終了に\ 0を使用するCでは、長さ1の文字列も割り当てます。この場合、文字列には\ 0が含まれているだけでなく終了しているため、標準の文字列関数は長さ0を報告します。安全にstr [0]を変更するか、単一の文字をそれにstrncatすることができます。

2
Lachlan Roche