文字列関係の関数は新バージョン(VC2005専用)があるのに、printf関数には
新バージョンがないのかと思われた人も多いと思います。実はprintf_s関数というのがあります。
int printf_s(
const char *format [,
argument]...
);
使い方は、printf関数と同じです。何が違うのかというと、
printf関数では書式指定文字列(format)がヌルポインタかどうかのみをチェックしているのに対して、printf_s関数は書式指定文字までもチェックします。
/* printfs01.c */
#include <stdio.h>
int main()
{
printf_s("%s君は、%d歳です。\n", "田中", 20);
printf_s("佐藤さんは20歳です\n");
return 0;
}
実行結果は、次のようになります。
これは、どうということもないですね。
整数値を文字列に変換する関数に_itoa関数がありました。これも、新バージョンが用意されています。
errno_t _itoa_s( int value, char *buffer, size_t sizeInCharacters, int radix );valueは、文字列に変換するint値です。
変換した文字列を格納するバッファ。
sizeInCharactersは、バッファサイズを指定します。
radixは、基数で2-36の範囲で指定。
では、整数値を10進、16進、2進で表した文字列に変換するプログラムを作ってみましょう。
/* itoas01.c */
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 15;
char sza[8];
_itoa_s(a, sza, sizeof(sza), 10);
printf_s("a(10進) = %s\n", sza);
_itoa_s(a, sza, sizeof(sza), 16);
printf_s("a(16進) = %s\n", sza);
_itoa_s(a, sza, sizeof(sza), 2);
printf_s("a(2進) = %s\n", sza);
}
実行結果は次のようになります。
ま、簡単といえば簡単ですね。
Update Aug/12/2007 By Y.Kumei