Что если пункт назначения и источник указывают на один и тот же объект?
strlcpy()
не является частью стандартной библиотеки C. Его точная функциональность может варьироваться от компилятора к компилятору. Просмотрите документацию конкретного компилятора / библиотеки, чтобы получить лучший ответ.
Как часть систем BSD, strlcpy (3) - Linux man page , я не нашел ничего - допускает перекрытие.
Начиная с C99, ключевое слово restrict
помогает ответить на вопрос «Что если пункт назначения и источник указывают на один и тот же объект?» part.
Если подпись была такой, как указано ниже, то при использовании destination, source
эта ссылка на перекрывающиеся данные будет неопределенное поведение . Может произойти что угодно.
size_t strlcpy(char * restrict destination, const char * restrict source, size_t size);
Если подпись была такой, как указано ниже, и компилятор соответствует C99 или более поздней версии, чем использование destination, source
, которое может перекрываться, это определенное поведение.
Если подпись была как указано ниже, и компилятор не является жалобой для C99 или более поздней версии, чем использование destination, source
, которое может перекрываться, вероятно неопределенное поведение , если документация не рассматривает этот случай.
size_t strlcpy(char * destination, const char *source, size_t size);