アカウント名:
パスワード:
printf(some_string_text); は、 printf("%s", some_string_text); としなさいというのがあり、目から鱗が落ちました。
fputs(some_string_text, stdout);
最初の「動作が違う」という指摘は、もし意図的に重箱の隅をつつくつもりでなかったとすれば、fputs() ではなく puts() と勘違いしたのかな。
どーでもいいことかも知れませんが、gcc の一部には printf("string constant\n")をputs("string constant")にすげ替えちゃうのがいるようです。
# printf 書いて気づいた
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
身近な人の偉大さは半減する -- あるアレゲ人
分量がすごそうなんですけど… (スコア:1)
Re:分量がすごそうなんですけど… (スコア:0)
ざっと目を通しましたが、やっぱり、C/C++プログラマとして、
文字列処理系の問題は頭が痛いなぁと思いました。
最後の方に、
printf(some_string_text);
は、
printf("%s", some_string_text);
としなさいというのがあり、目から鱗が
Re:分量がすごそうなんですけど… (スコア:2, 参考になる)
fputs(some_string_text, stdout);
にせよ、と教えてるんですけど... (セキュリティ以前の問題で)。Re:分量がすごそうなんですけど… (スコア:1)
Re:分量がすごそうなんですけど… (スコア:0)
printf("%s", some_string_text);
と
fputs(some_string_text, stdout);
ではどのように動作が異なるのですか?
Re:分量がすごそうなんですけど… (スコア:2, 参考になる)
1.成功時の戻り値の仕様
printf:転送された文字数を返す。
fputs: 非負の値を返す。
2.エラー時の戻り値の仕様
printf:出力エラーが発生したときは、負の値を返す。
fputs:書込みエラーが発生するとEOFを返す。
3.変更、拡張への対応
"%s"を前提としている場合でも、printfでは"%10s"のような文字数指定への拡張が可能です。
fputsではできません。
それで、printfと等価なのは、fprintfの第一引数にstdoutを指定したものというところでしょう。
ご参考になればよいのですが。
Re:分量がすごそうなんですけど… (スコア:1)
使いますよね。それならfputs(3)を使えばよくて
(puts,getsは末尾の改行を扱う、fputs,fgetsは扱わない)
元コメント [srad.jp]
は多分「printfのほうがfputsより重いから」
ではないですか?
Re:分量がすごそうなんですけど… (スコア:0)
fputs(some_string_text, stdout);
これらの例では返り値を捨てているので、
1.成功時の戻り値の仕様
2.エラー時の戻り値の仕様
の違いは動作には影響しないと思います。
また、大元が
printf(some_string_text);
という変更・拡張を考慮しないコードで
Re:分量がすごそうなんですけど… (スコア:0)
> "%s"を前提としている場合でも、printfでは"%10s"のよう
> な文字数指定への拡張が可能です。
それがどのように関係しているのか分かりません。
/*a*/ printf("%s", some_string_text);
/*b*/ fputs(some_string_text, stdout);
/*c*/ printf("%10s", some_string_text);
# aとbは同じ動作ですが、cは異なる動作となります。
Re:分量がすごそうなんですけど… (スコア:0)
最初の「動作が違う」という指摘は、もし意図的に重箱の隅をつつくつもりでなかったとすれば、fputs() ではなく puts() と勘違いしたのかな。
Re:分量がすごそうなんですけど… (スコア:1, 興味深い)
どーでもいいことかも知れませんが、gcc の一部には printf("string constant\n")をputs("string constant")にすげ替えちゃうのがいるようです。
# printf 書いて気づいた