Подробности

[В начало]

Проблема в стандарте № S0022

Краткое описание

В стандарте сказано, что первый параметр функции strnlen() – это строка. Это сужает область применимости функции. Логично указать, что первым параметром функции может быть массив char.

Подробное описание

В стандарте сказано, что s – это строка (string). Стоит отметить, что согласно стандарту строка должна всегда завершаться нулевым символом. В спецификациях других функций, имеющих сходную функциональность (например, strncpy) на вход подаётся именно массив (array), а не строка - т.е. наличие нулевого символа в конце не требуется.

Раздел стандарта

Linux Standard Base Core Specification 3.1, Chapter 13. Base Libraries, 13.5. Interface Definitions for libc, description of function strnlen.

Возможные последствия

Если строго следовать стандарту, программист приложений вынужден писать свою функцию определения длины в случае, если он работает с данными, где могут встречаться не только строки, но и массивы. Эта реализация не будет общепринятой и будет менее эффективной, чем у strnlen().

Способы устранения

Потребовать, чтобы параметр s был массивом. Т.к. стандарт говорит, что «strnlen() looks only at the first maxlen characters at s and never beyond s + maxlen.», то это будет логичным требованием.

Принято

LSB Bugzilla, 1329

Статус

Исправлена в LSB 3.2

[В начало]