sprintf関数は、大変便利な関数で頻繁に用いられますが、VS2005ではこれに代わって
sprintf_s関数が導入されました。
int sprintf_s(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument] ...
);
bufferは、出力を格納するバッファを指定します。sizeOfBufferには、格納する最大も字数を指定します。
formatは、書式指定です。
関数が成功すると書き込まれた文字数が返され、失敗したときは-1が返されます。
では、サンプルを見てみましょう。
/* sprintf01.c */
#include <stdio.h>
int main()
{
char szName[] = "マイケル", szBuf[64];
int nAge = 10;
double bl = 172.5;
sprintf_s(szBuf, sizeof(szBuf),
"%sは%d歳です。身長は%5.1fcmです\n",
szName, nAge, bl);
printf(szBuf);
return 0;
}
実行結果は次のようになります。
では、戻り値も調べてみましょう。
/* sprintf02.c */
#include <stdio.h>
int main()
{
char szName[] = "田中佳子", szBuf[64];
int nRet, nAge = 20;
nRet = sprintf_s(szBuf, sizeof(szBuf),
"私の名前は%sです\n年齢は%d歳です\n",
szName, nAge);
printf(szBuf);
sprintf_s(szBuf, sizeof(szBuf),
"返された値は%dです\n",
nRet);
printf(szBuf);
return 0;
}
実行結果は次のようになります。
この例では、文字列はANSCIを使っているので返される値は
文字数ではなくバイト数である点に注意してください。
ま、どうということもありませんね。
Update Jul/06/2006 By Y.Kumei