パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

文字列操作は「C言語最大の欠点」か?」記事へのコメント

    • これ使っても”バッファオーバーランが起きない”わけじゃないよ。
      • おお、詳しく教えていただけませんか?

        • by Anonymous Coward
          リンク先に、そう書いてあるよ。ちゃんと読んでみて。
          • by coffe_ata (31369) on 2010年10月22日 17時32分 (#1845744) 日記

            ただし ISO/IEC TR 24731-1 関数を使ったとしても、コピー先バッファの最大長およびコピーする文字の数が間違って指定された場合、依然としてバッファオーバーフローを引き起こす可能性はある。

            これですか?
            うーん、そこまで徹底するとなると、文字列にメモリをアロケートするライブラリを使うか、そうなると大掛かりになって来るので、本当にCが必要なのか?を問う場面ですね。

            親コメント
            • by Anonymous Coward on 2010年10月22日 20時35分 (#1845864)
              徹底するというか、そうではなくて、正しいサイズが必要なときに使えるようにプログラミングすることが、Cでは結構厄介なんですよ。もちろん、オブジェクトを確保してすぐにアクセスする場合は問題ありません。同じスコープ内にその値を保持した変数なり、定数なりがありますから。問題なのは、ポインタを他の関数に渡してそこで使おうとする場合です。ポインタだけではなくそのサイズも渡さないといけない。そのオブジェクトがmallocなどで動的に確保されたものはもちろん、真の配列であってもです(この文脈では配列はポインタに成り下がっちゃいますから、受け取った側でsizeof演算子を適用しても無意味です)。ましてや、確保したオブジェクトの先頭以外をさすポインタを渡すときにはちゃんとサイズを再計算しておかねばなりません。はっと我に返ると、safe-Cが自動でやってくれてることとほとんど同じことを延々とコーディングしてたりするんですね。鬱。
              親コメント
              • by coffe_ata (31369) on 2010年10月22日 23時33分 (#1845964) 日記

                固定長の場合、ヘッダでマクロ定義して、必要な都度includeしませんか?
                私の場合、ずっとそうやってきましたが。

                親コメント
              • by Anonymous Coward
                このような人によって、再利用性の低いコードが量産されていたんですね。わかります。
              • by coffe_ata (31369) on 2010年10月22日 23時59分 (#1845986) 日記

                ううむ、そこまで細かい所で再利用性を考えます?
                うまくカプセル化が出来ていれば、そんなに酷くはないと思ってますけど……。

                親コメント
              • by Anonymous Coward

                このような人によって、再利用性の低いコードが量産されていたんですね。わかります。

                目的・意味付け毎にtypedefやstructで宣言するのが普通では? 同じサイズの固定長だからといって一緒くたにするのは"再利用性"とは言えない気がする。

            • by Anonymous Coward
              というか、プログラマの書き間違えとそうでないものを、一緒にしていいのかなあ。
              前者は言語特有の問題なのか???

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

処理中...