[flac-dev] snprintf and MS Visual Studio
Ben Allison
benski at winamp.com
Thu Mar 14 18:36:15 PDT 2013
Microsoft provides a surprisingly good (but proprietary) API inside strsafe.h. StringCchPrintfA can be substituted for snprintf but the return value is different. A small wrapper function around StringCchPrintfExA could get you enough information to emulate snprintf well. But sprintf_s might be good enough for the limited uses inside flac, as you said.
Sent from my iPhone
On Mar 14, 2013, at 9:09 PM, Erik de Castro Lopo <mle+la at mega-nerd.com> wrote:
> Christoph Terasa wrote:
>
>> Since MS refuses to support C99, the common practice is to use either
>>
>> sprintf_s:
>> http://msdn.microsoft.com/en-us/library/ce3zzk1k(v=VS.80).aspx
>> _snprintf_s:
>> http://msdn.microsoft.com/de-de/library/f30dzcf6(v=VS.80).aspx
>>
>> The former can be used as a drop-in replacement of snprintf via a
>> define, the latter takes an additional argument count which can limit
>> the bytes written to the buffer additionally.
>
> Hmm, the first can be used as a drop-in replacement for many but
> not all uses of ISO C99 snprintf. For the uses in FLAC, it should
> be sufficient, we just have to be careful not to rely on the return
> value.
>
>> DO NOT use
>> _snprintf:
>> http://msdn.microsoft.com/de-de/library/2ts7cx93(v=vs.80).aspx
>>
>> since this does not NULL terminate if the length of the buffer is equal
>> to the given buffer size (or larger than), and this differs from the std
>> behaviour as stated at e.g. http://linux.die.net/man/3/snprintf
>
> Yes, now I remember, that one is horribly broken.
>
> Erik
> --
> ----------------------------------------------------------------------
> Erik de Castro Lopo
> http://www.mega-nerd.com/
> _______________________________________________
> flac-dev mailing list
> flac-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/flac-dev
More information about the flac-dev
mailing list