Здравствуйте Денис Смирнов В сообщении от 29 ноября 2007 Денис Смирнов написал(a): > On Wed, Nov 28, 2007 at 02:33:28PM +0300, Dmitry V. Levin wrote: > > > >> - strncat(ttyname, name, sizeof(ttyname)); > >> > >> + strncat(ttyname, name, sizeof(ttyname)-1); > >> > > >> Автор этого кода не справился с функцией strncat. > > >> Исправление тривиально. > >> Фикс должен быть таким (см. выше)? Или нет? > DVL> Да, таким. > > > > Правильно ли я понял, что: > strlcat(ttyname, name, sizeof(ttyname)); > будет лучшим решением? > > А также изменить размер ttyname с PATH_MAX на PATH_MAX + 1 (с учетом > '\0' > на конце)? В принципе да. Тут ещё стоит обратить внимание на сам размер PATH_MAX. В 90% случаях этот размер излишний. А так-как массив символов создаётся внутри функции, то идут излишние действия по его созданию. Возможно, его-бы следовало сделать глобальным (вернее указатель на строку) и создавать динамически по реальному размеру строки, насколько я помню (если не путаю), getline это позволяет, плюс можно посчитать сколько реально нужно с случае, если оператор ввёл вместо /dev/ttyS0 просто ttyS0. Впрочем это надо смотреть код всей программы - возможно там можно как-то это обойти. Как я понимаю, такие большие массивы появляются из желания программиста не допустить переполнения буфера при вводе строки оператором, так что, тут надо быть внимательным, и действия по переделыванию кода делать осмысленные :) -- С уважением Хихин Руслан