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

iPhoneで接続するとWi-Fi機能が無効になってしまうSSID名のバグ」記事へのコメント

  • printf? (スコア:5, 参考になる)

    by Anonymous Coward

    printf(SSID)かsprintf(buffer, SSID)をやってると飛びそうな文字列だけど…。

    まず知ってないとマズい話として、ユーザが入力した何が入ってるか分からん文字列を表示したい、という場合に、

    printf(ユーザが入力した文字列とか);

    は絶対にやっちゃダメな書き方なんだけど。

    printf("%s", ユーザが入力した文字列とか);

    とかputs()を使う必要あり。

    %pはポインタのアドレスを表示なので引数が16進で表示される。
    %sはポインタが指す先を文字列として表示
    %nはそこまでに出力した文字数をポインタが指す先に格納

    なので、もしその書き方をしてしまったというセキュリティ

    • by Anonymous Coward on 2021年06月23日 10時11分 (#4056238)

      良く解説したえらいなぁ
      しかし%nはホントクソ
      printfが古すぎるのや

      親コメント
      • by Anonymous Coward

        C++ で行儀悪いの分かっててもストリームじゃなくて printf 使っちゃうんですよね(ただのロートルなだけですが)
        ただ今時業務系だとロケール切替えのために引数の順序を指定できないと困るので、printf はデバッグトレース時ぐらいしか使わないかなー
        # そしてそのデバッグコードが本番に混ざるまでがお約束

        • by taka2 (14791) on 2021年06月23日 16時32分 (#4056512) ホームページ 日記

          > 引数の順序を指定できないと困る

          標準ではありませんが、今時だとたいがいPOSIXの引数順指定 [wikipedia.org]が使えると思いますよ。

          const char* fmt = "Invalid command %1$s at line %2$d.\n";
          const char* cmd = "hoge";
          const int lineNumber = 20;
          printf(fmt, cmd, lineNumber);
          とした場合、
          Invalid command hoge at line 20.
          と表示される。

          親コメント
        • by Anonymous Coward
          C++のストリームはただの演算子オーバーロードの例であってあれを実際に使う方がよっぽど行儀悪いと思うよw
          • by Anonymous Coward

            ログは全部あれで出してるな
            printfよりはましやと思うぞ

          • by Anonymous Coward

            C言語もC++もなぜHello, Worldに初心者にはとてもおすすめできない言語機能を投入しまくるのか
            (可変長引数、ADL、演算子オーバーロード...)

            • by Ryo.F (3896) on 2021年06月23日 22時45分 (#4056717) 日記

              プログラミング初心者を想定ユーザとしていないから、では?

              もっとも、それら機能は非初心者が生むバグの原因にもなっている。
              避けがたい理由が無ければ、CもC++も使うべきではない、と言う事じゃないかな。
              初心者に限らず。

              親コメント
      • by Anonymous Coward

        文字数なら戻り値があるのに、%nってどう使うんだろな。

        • by Anonymous Coward on 2021年06月23日 12時28分 (#4056346)

          全部じゃなくて、%nの位置までに出力した文字数ってとこに意味があるんやで。

          空白区切り可変長のカラムヘッダを出力して、
          次の行にカラム毎の区切り線出したい時とか便利やろ?

          親コメント
          • by Anonymous Coward

            便利かもしれんがprintfに入れる機能とは思えない・・・

      • by Anonymous Coward

        マイクロソフトのドキュメントだと、セキュリティー的にあかんので%nはデフォルトでは無効になってるそうですが、
        まだ少数派なのかな。

人生の大半の問題はスルー力で解決する -- スルー力研究専門家

処理中...