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

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

  • 次はメモリ管理へ (スコア:3, すばらしい洞察)

    malloc したら free しなきゃいけないのが C 言語最大(!?)の欠点だ!
    という評論が載りそうな気がします。

    #バッファーオーバーフローが気になるなら gets じゃなくて fgets を使えばいいような?

    • by Anonymous Coward on 2010年10月22日 16時28分 (#1845683)

      なら標準ライブラリにgetsが存在したりif (n = 1) {}がコンパイルできたりしてしまうこと自体が欠点。
      回避策があればそれだけでいいってもんじゃないだろ。

      親コメント
      • getsはともかく、代入が式なのは決して悪くない。
        assert(a = malloc(...)); みたいな使い方はそこそこ便利だ。

        一応、そこでミスらない方法として if(1 == n) と書く習慣をつければ間違って if(1 = n) と書いたときコンパイラがエラー出してくれるってのがあるらしいが、どうせ if(n == m) では使えないテクなのでおすすめしない。

        --
        1を聞いて0を知れ!
        親コメント
        • Re:次はメモリ管理へ (スコア:3, すばらしい洞察)

          by shuichi (572) on 2010年10月23日 2時45分 (#1846041) 日記

          > assert(a = malloc(...)); みたいな使い方はそこそこ便利だ。

          assertの用途を考えると不適切に思えるのだが、
          私がおかしいのか?

          親コメント
          • by Anonymous Coward

            NDEBUGでなくなっちゃうよね。

            • by Anonymous Coward

              こいつのためだけにVCでVERIFYってのが開発されたんだろ。
              VERIFYを使っても何をしたいかはわからないが。

        • by Anonymous Coward
          assertの中にメモリ割り当てを書く馬鹿が現れることを防ぐような言語仕様になっていないことが最大の欠点ですね、わかります。
      • by Anonymous Coward
        実際代入結果を分岐の判断にしたい場合だって有るし、
        コンパイルできないと困っちゃうよ...
        わかり辛いコードにはなっちゃうんだけどね。
        • by Anonymous Coward
          代入と分岐を分ければ済む話

計算機科学者とは、壊れていないものを修理する人々のことである

処理中...