ページ 11

swprintf(wchar_t,size_t,const wchar_t*,...)とswprintf(wchar_t

Posted: 2012年12月24日(月) 23:38
by bonbo
早速ですが質問させていただきます。
ちょっとしたことなのですが、
int swprintf(wchar_t * _String, const wchar_t * _Format, ...)

static int swprintf(wchar_t * _String, size_t _Count, const wchar_t * _Format, ...)
の動作の違いを教えていただけないでしょうか。

具体的には、仮に、以下のプログラムを組んだ場合、どちらとも同じ動作をするのでしょうか。

コード:

//swprintf(wchar_t*,const wchar_t*,...)を用いた場合
    int test=80;
	wchar_t text1[256];
    for(int i=0;i<256;i++)
        text1[i]=L'\0';
    
	swprintf(text1,L"りんご%d円",test);

コード:

//swprintf(wchar_t *, size_t, const wchar_t *, ...)を用いた場合
    int test=80;
	wchar_t text1[256];
    for(int i=0;i<256;i++)
        text1[i]=L'\0';
    
	swprintf(text1,256,L"りんご%d円",test);

一応調べてみたのですが、定義と用法がコピペしてあるサイトばかりで
煮詰まってしまったので質問させていただきました。

環境は
Xcode4.4(だと1の方は使えませんが…),VS2010です。
よろしくお願いします。

Re: swprintf(wchar_t,size_t,const wchar_t*,...)とswprintf(wch

Posted: 2012年12月25日(火) 00:24
by h2so5
基本的には同じ動作ですが、1の方は出力の最大文字数を指定しないためバッファオーバーフローが起きる危険性があります。
1はISO C 規格に準拠していませんし、使うべきではありません。

Re: swprintf(wchar_t,size_t,const wchar_t*,...)とswprintf(wch

Posted: 2012年12月25日(火) 01:04
by bonbo
>H2So5さん
ありがとうございます。
>基本的には同じ動作
なるほど、VSで使えていた1をXcodeで2に書き換えて使用したらうまくいかなかったので不安だったのですが、
同じ動作ということは別の場所に原因があるのですね。
>1はISO C 規格に準拠していませんし、使うべきではありません。
使わないように心がけます。

ありがとうございました。