2017-02-27 7 views
1

私の次のプログラムはここにあります。私はこのコード行は、このコードの代替として使用するのに十分安全である場合、私は思っていたfputs()代わりのputs()fputsまたはputcharを使用する必要がありますか?

char words[5][6] = {"One", "Two", "Three", "Four", "Five"}; 
for (i = 0; i <= 4; i++) 
    fputs(words[i], stdout); 

を使用する理由である新しい行を、望んでいません。

for (i = 0; i < 5; i++) 
{ 
    for (j = 0; j < 6; j++) 
    if (words[i][j] != NULL) 
     putchar(words[i][j]); 
    else 
     continue; 
} 

注:私は承知している2番目のコードセクションのループは、特にIF文で、少し作業が必要ですが、私は、全体的な出力に疑問を抱きました。私は最初の質問でgets()を使用していないと言われたので、この質問をしています。だから私は悪いキーワードを避けて話したいと思っていました。

+0

これは、代替品に比べて十分安全で、はるかに簡単です。 – chqrlie

答えて

1

fputsまたはputcharを使用しますか?

fputsを使用することをお勧めします。目的を達成するには、ホイールを再構成する必要がないためです。

putcharでの2番目のアプローチも機能しますが、なぜ再びホイールを再発明するのでしょうか?しかし、何らかの理由でputcharを使用する必要がある場合は、をbreakに置き換えて、文字列の末尾を示すnull characterに遭遇したときに内側ループから脱出する必要があります。

0

getsは本質的に安全ではなく(2011年にC規格から削除されました)、fputsではありません。 fputsを使用しているコードに何も問題はありません。

0

fputsは安全です。 getsは、あなたが言ったように、良いことではありません。

0

putsおよびfputsは、その意味では安全です。あなたの選択肢は、fputsの(悪い)C翻訳です。ヌル文字の後にループを続けるので、間違っています。何らかの理由で、最初のヌルの後にガベージ(以前の長い文字列のもの)が存在する場合は、それを使用します。

とにかく、標準ライブラリの関数は最適化されている可能性があるので、関数を使用する必要があります。

関連する問題