[リロード] [検索]

[スレッド全体]

▼ 2016/11/30 (水) 16:30:13 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
[2387] Re5:セキュアなsnprintf関数。
>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分を含める実装となっていると。

▼<2382> セキュアなsnprintf関数。 ばぼ 〔11/27 00:12〕
└▽<2383> Re:セキュアなsnprintf関数。 LR4 〔11/27 00:56〕
  ├▽<2384> Re2:セキュアなsnprintf関数。 ばぼ 〔11/27 18:06〕
  │└▽<2385> Re3:セキュアなsnprintf関数。 もか 〔11/27 22:38〕
  │  └▽<2386> Re4:セキュアなsnprintf関数。 ばぼ 〔11/30 01:15〕
  │    ├▽<2387> Re5:セキュアなsnprintf関数。 もか 〔11/30 16:30〕 ≪
  │    └▽<2388> Re5:セキュアなsnprintf関数。 もか 〔11/30 16:31〕
  │      └▽<2390> Re6:セキュアなsnprintf関数。 ばぼ 〔12/3 00:36〕
  └▽<2393> Re2:補足 SNK 〔12/23 06:54〕

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81
[ut:0.000][st:0.000]