Существует две стратегии безопасного манипулирования строками. Сопровождающие Linux / glibc отказываются добавлять безопасные функции, утверждая, что вы должны держать длину своих строк под рукой и использовать memcpy
.
С другой стороны, Mac OSX включает в себя strlcpy
и strlcat
из BSD. snprintf
и asprintf
могут использоваться на обеих платформах практически одинаково:
size_t strlcpy(char *d, char const *s, size_t n)
{
return snprintf(d, n, "%s", s);
}
size_t strlcat(char *d, char const *s, size_t n)
{
return snprintf(d, n, "%s%s", d, s);
}
Вы также можете рассмотреть возможность использования реализации BSD , найденной здесь . Если ваш код будет скомпилирован на нескольких платформах, вы можете проверить наличие glibc, используя предопределенные библиотечные макросы :
#if defined __GNU_LIBRARY__ || defined __GLIBC__
size_t strlcpy(char *, char const *, size_t);
size_t strlcat(char *, char const *, size_t);
#endif
Преобразование между кодировками символов легче всего выполнить с помощью интерфейса iconv
.