プログラム組み立て係

C言語の事柄を主に書いてます

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

printf類1

文字列系統の関数
printf( const char *format, ... )
   標準出力に文字列を出力する関数(コンソール画面に文字を出す関数)
fprintf( FILE *stream, const char *format, ... )
   指定したストリームに文字列を出力する関数(ファイルに文字を出す関数)
sprintf( char *str, const char *format, ... )
   指定したメモリに文字列を出力する関数(strのメモリに文字を入れる関数)
snprintf( char *str, size_t size, const char *format, ... )
   sprintfと同じに近いが、こちらの方が安全で推奨される関数

※引数にある ... は可変個数の引数を意味していて、
 有限ではあるが、無限に近いような引数を持つ事も可能である。



printf関数の簡単な使用例


#include <stdio.h>

int main()
{
 printf( "Hello!World!" );
 return 0;
}



fprintf関数の簡単な使用例

#include <stdio.h>

int main()
{
 FILE* pfile;
 // sample.txtにw(write:書き込むモード)
 pfile = fopen( "sample.txt", "w" );
 fprintf( pfile, "Hello!World!" );
 // sample.txtを閉じるおまじない
 fclose( pfile );
 return 0;
}



sprintf関数の簡単な使用例

#include <stdio.h>

int main()
{
 char str[27]; // str変数の27個の配列を作る
 sprintf( str, "abcdefghijklmnopqrstuvwxyz" );
 puts( str ); // str変数の内容を画面に表示
 return 0;
}



snprintf関数の簡単な使用例

#include <stdio.h>

int main()
{
 char str[27]; // str変数の27個の配列を作る
 snprintf( str, sizeof( str ), "abcdefghijklmnopqrstuvwxyz" );
 puts( str ); // str変数の内容を画面に表示
 return 0;
}



snprintf関数がなぜsprintfよりも推奨されるか?
それは、sprintfと違って、snprintfの第2引数のところにある大きさを指定し、
書き込む大きさがそれ以上あった場合、その後に入れる文字列をカットする事ができるからである。



snprintf関数がsprintfよりも推奨される理由を示す例1

#include <stdio.h>

int main()
{
 char str[3]; // str変数の3個の配列を作る
 sprintf( str, "abcd" );
 puts( str ); // str変数の内容を画面に表示
 return 0;
}



snprintf関数がsprintfよりも推奨される理由を示す例2

#include <stdio.h>

int main()
{
 char str[3]; // str変数の3個の配列を作る
 snprintf( str, sizeof( str ), "abcd" );
 puts( str ); // str変数の内容を画面に表示
 return 0;
}



例1、例2ともコンパイルできると思う。(Bolandの無料コンパイラなら普通に通った)
まずは、例2の実行ファイルを実行するとstr変数の3つ分という事で、abcまで表示され終了する。
そして、例1の実行ファイル(.exe)を実行したときにabcdと表示された後
プログラムが終了しないはず。これが、snprintf関数が推奨される理由である。
sprintf関数では、メモリ溢れを感知できないのである。
こういうバグを作らないためにも引数の数が多く、
面倒くさいがsprintfよりもsnprinfの方を私は推奨する。

最後に、変な口調ですんませんww

Comment

コメントの投稿


管理者にだけ表示を許可する

Trackback

http://deltakirin.blog91.fc2.com/tb.php/50-1d65e38b

 | HOME | 

プロフィール

δキリン

Author:δキリン
パソコン関連のことについて
いろいろつづっていきたいと
思っています。

相互リンクは大歓迎ですよ!

もし良かったら、
ポチっとよろしくお願いします



※関係ないページ表示されたとき、
 下の検索フォームから検索してください


最新記事


カテゴリ

TOP (1)
C言語 (19)
HTML (2)
ハードウェア (5)
ソフトウェア (11)
美少女ゲーム (25)
音楽 (2)
アニメ (3)
不定期日記 (15)
本 (4)
雑記 (6)
未分類 (0)

月別アーカイブ


最新コメント


アクセスカウンター


検索フォーム


RSSリンクの表示


リンク

このブログをリンクに追加する

応援中

『airy[F]airy (エアリィフェアリィ)』応援中! 『ひだまりバスケット』応援中です! キスと魔王と紅茶 PULLTOP se・きらら バナー

ブロとも申請フォーム

この人とブロともになる


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。