2017-06-12 3 views
2

私はac#プログラムを持っていて、特定の文字列(通常の文字列、何も特別なもの)でmessageBoxを呼び出そうとしています。連結。 コード:MessageBoxは指定されたすべての文字列を表示しません

string first = userInfo.info.getFirst(); //Some function 
string last = userInfo.info.getLast(); // Some function 
string message = first + "_" + last + " !"; 
MessageBox.Show(message); 
// Output will be "(first value)"; 

私はデバッグしてみましたし、「最初」と「最後」の値が正しいと罰金です。 私はまた、(VSのツールを使用して)CPUやメモリのピークが発生しているかどうかを調べましたが、何も見えませんでした。

問題はありますか? ありがとう!

+3

'first'または' last'のいずれかに '\ 0'(" null "文字)が含まれていますか?あなたは[mcve]を提供できますか? –

+0

それはまさにそれです、ありがとう!問題がどこから来たのか分かります。 –

+0

その場合、私は答えを追加します。 –

答えて

4

\0文字(U + 0000、Unicode "null")が見つかると、Win32 GUIライブラリは文字列を終了します。あなたが持っていた場合、例えば:

MessageBox.Show("First part\0Second part"); 

をのみFirst partが表示されます。 「悪い」の文字がから来ている

  • ワークアウト:

    は、ここでは、少なくとも2つのオプションがあります。 Readコールで返されるバイト数や文字数には注意しないでください。

  • などの「悪い」文字を削除するだけで、多くの場合、StreamまたはTextReader APIが誤って使用されます。 message = message.Replace("\0", "");

最初の選択肢であることが好ましい - 私は本当にはクリーンなデータを取得できませんでした場合、私は唯一の第二に頼ると思います。

関連する問題