Большинство программистов C знакомы с функцией strdup
. Многие из них будут считать это само собой разумеющимся, но это не является частью стандарта C (ни C89, C99, ни C11). Он является частью POSIX и может быть недоступен во всех средах. Действительно, Microsoft настояла на том, чтобы переименовать его _strdup
, добавив в замешательство.
Легко определить его таким образом (в C):
#include <string.h>
char *strdup(const char *s) {
size_t size = strlen(s) + 1;
char *p = malloc(size);
if (p) {
memcpy(p, s, size);
}
return p;
}
Но даже опытные программисты могут легко ошибиться.
Кроме того, переопределение функции только в системах, которые ее не имеют, оказывается несколько сложным, как описано здесь: функция strdup()
Почему бы не включить такие полезные широко поддерживаемые функции в пересмотренные версии стандарта C? В стандартной библиотеке C в C99 было добавлено много новых функций, что является обоснованием того, что не включает strdup
?