プログラミング今回はちょっと技術的な話を。メンバーの方からC言語の質問を受けました。Rubyの勉強会なのにC言語の話題も出てくる、というところがこのコミュニティのよいところです。懐の深さやメンバーの方の強い向上心を感じますね。str);}こういうコードを書いたとき、文字列の設定先を配列にするかポインタにするかで動きが変わるのはなぜか?不思議だったそうです。10とエラーになってしまうのはどうして?という疑問でした。faultになるなど、OSによって現象は異なります。たしかに、「C言語ではポインタと配列を区別せず、同じように扱える」と言われていますから、なぜ動きが変わってしまうのか不思議に思えますね。この問題はわりと有名みたいで、他のブログなどでもよく話題になっているようですが、私なりの説明をしてみたいと思います。'\0'};と同義です。str[]はローカル変数なので、関数が呼び出されたときにstrという配列用の領域が獲得され、ここに"hogehoge"という文字列が設定されることになります。この配列は、スタック領域(stack)という読み書き可能な領域に存在します。...(2)のときは、コンパイルされた時点で、"hogehoge"という文字列リテラルが実行ファイル内に設定されています。関数が呼び出されたときに、ポインタ変数strが文字列リテラルの先頭アドレスで初期化されます。この文字列リテラルは、リードオンリーデータ領域(.rodata)という、読み取りのみ可能な領域に存在します。...(1)は、読み書き可能なスタック領域に文字列が存在するので、文字列を書き換えできる。