0

_snprintf_s でこの奇妙なエラーが発生します。

int ival = strlen("F(LL)L");
char buff[32];
memset(buff,0,sizeof(buff));
_snprintf_s(buff,strlen("F(LL)L"),_TRUNCATE,"%s","F(LL)L");

文字列の長さは 6 として計算されますが、バフのみがコピーされます。完全な文字列"F(LL)"として長さパラメーターを指定した場合、コピーされます。strlen("F(LL)L") + 1

4

1 に答える 1

7

_snprintf_s()の2番目の引数は、ターゲットバッファーのサイズ(バイト単位)です。終了文字用に1バイトを予約する必要があるため、NUL入力文字列の最後の文字はコピーされません。

入力文字列の長さではなく、バッファの実際のサイズを渡す方が適切です(そしてはるかに安全です)。

_snprintf_s(buff, sizeof(buff), _TRUNCATE, "%s", "F(LL)L");
于 2012-05-10T08:00:18.393 に答える