Re: ngx_snprintf не ставит '\0' в конце строки

Peter Leonov gojpeg at gmail.com
Mon May 18 15:29:56 MSD 2009


Большое спасибо, пойду запишу.

С памятью в энжинксе все вообще шикарно — это первое, что меня в нем  
поразило.
Теперь, когда вижу в других проектах простой malloc, трясет всего  
насквозь :)

On 18.05.2009, at 3:19, Maxim Dounin wrote:

> Hello!
>
> On Mon, May 18, 2009 at 02:33:59AM +0400, Peter Leonov wrote:
>
>> Здравствуйте.
>>
>> Понимаю так, что вызывающая ngx_snprintf() строна сама должна
>> позаботиться о терминаторе в случае, когда он нужен. Верно понимаю?
>
> Нет.  Если нужен '\0' - надо в явном виде его попросить.  Это
> делается через %Z.
>
>> А в общем, функции ngx_*printf() были созданы для того, чтобы было  
>> легко
>> печатать встроенные в энжи типы данных? Или они служат достижению  
>> других
>> целей?
>
> Да.  Плюс они не занимаются печатью '\0' там где это не надо, и не
> делают abort() при нехватке памяти (точнее - вообще не пытаются
> выделять память).
>
> Maxim Dounin
>

On 18.05.2009, at 10:05, Igor Sysoev wrote:

> On Mon, May 18, 2009 at 02:33:59AM +0400, Peter Leonov wrote:
>
>> Здравствуйте.
>>
>> Понимаю так, что вызывающая ngx_snprintf()
>> строна сама должна позаботиться о
>> терминаторе в случае, когда он нужен.
>> Верно понимаю?
>
> %Z
>
>> А в общем, функции ngx_*printf() были созданы
>> для того, чтобы было легко печатать
>> встроенные в энжи типы данных? Или они
>> служат достижению других целей?
>
> На самом деле, он был создан, чтобы печать ставшие стандартными типы  
> C:
> off_t, time_t, size_t, pid_t, etc. Когда-то configure подбирала для  
> них %lld
> и прочая. Потом я плюнул и сделал ngx_snprintf(), заодно добавив туда
> nginx'овских типов. Минус ровно один - при использовании родного  
> sprintf()
> icc (не знаю, как другие сейчас) умеет предупреждать о  
> несоответствии типа
> параметру.
>
>
> -- 
> Игорь Сысоев
> http://sysoev.ru
>

--
С уважением,
Петр Леонов.



More information about the nginx-ru mailing list