質問: Convert.Tostring(p_str);にしてしまうと"H"だけしか表示されないという原因は前回の質問で理解しました。 string型でアドレスを見てやれば"Hello"と表示されるということで、stringで見てやろうと試行錯誤しましたが、キャストできません。と出てきて困っています。 上記のコードでtextBox1に"Hello"と表示させるにはどのようにキャストしてやれば表示できますでしょうか。 よろしくお願いいたします。
回答: Windows FormアプリケーションのTextBoxならば、 `textBox.1.Text = str;` で充分です。ポインターで扱う必要はなく、fixedステートメントを使う必要もありません。 ``` private void button1_Click(object sender, EventArgs e) { string str = "Hello"; // textBox1 は System.Windows.Forms.TextBoxクラス textBox1.Text = str; } ``` **追記**:理由があってポインターを使っているとのことでしたので追記しました。 最終的にどのように使われるかを推測しかねているのですが、テキストボックスのテキストをセットするプロパティ`TextBox.Text`はstring(System.String)型のプロパティなので、キャストしてセットできる部分では無いです。元のstringをchar* でポインターを介して操作した後にTextBox.Text にセットすれば目的を達せられるのではないでしょうか。 あるいは`textBox1.Text = new string(p_str);` の1行でいいかもしれません。 質問者様の使われ方に合致しているか分かりませんが、以下、例です。元のstr を編集してtextBox1にセットし、その文字列をもとにstr2を生成して編集し、textBox2にセットします。 ``` private unsafe void button1_Click(object sender, EventArgs e) { string str = "1234567890"; string str2 = null; fixed (char* p_str = str) { // ポインターを経由してstrを編集 *(p_str + 0) = 'A'; *(p_str + 1) = 'B'; // 編集後のstrの内容を用いてSystem.String(char *)のコンストラクタで生成 str2 = new string(p_str); fixed (char* p_str2 = str2) { // str2をポインター経由で編集 *(p_str2 + 2) = 'C'; *(p_str2 + 3) = 'D'; } } // str == "AB34567890" textBox1.Text = str; // str2 == "ABCD567890" textBox2.Text = str2; } ``` 以下のようになります。 !イメージ説明