В чем смысл не включать strdup в стандарт C?
Большинство программистов на 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
?