>sprintf_s(out, size, format, ...)
>size - 1文字出力すると末尾に'\0'を付加して終了します。
>countには _TRUNCATE という特別な値を指定できるのですが、
>_TRUNCATEを指定した場合の動作はsprintf_sと等価です。
言っている内容がいまいち理解できないのは、たぶんこの前提が間違ってるからだと思いました。
char test[4];
int ret = _snprintf_s(test, 4, _TRUNCATE, "%s", "1234567890");
>ret=-1 test="123"
int ret = _snprintf_s(test, 4, 3, "%s", "1234567890");
>ret=-1 test="123"
int ret = _snprintf_s(test, 4, 4, "%s", "1234567890");
>実行時エラー
int ret = sprintf_s(test, 4, "%s", "1234567890");
>実行時エラー
こうなるみたいです。
あとsprintf_sはVC2005では存在していなくて「_sprintf_s」ですよね。
>snprintfがない状態になっています。
参考
https://sourceforge.net/p/sakura-editor/patchunicode/82/>どう倒しても紛らわしいので、
>・VCの _snprintf に対応する auto関数は提供しない。
>・今の auto_snprintf は auto_snprintf_s に変名。
と書かれています。
auto_snprintf_s→サクラでは_TRUNCATE前提でバッファ切り詰めで使う&-1
auto_sprintf_s→あふれたら異常終了
auto_sprintf→あふれないことが保証されたときに使ってもいい
どれも、引数のバッファ長は\0分を含める実装となっていると。