В чем смысл не включать 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?

Ответы на вопрос(1)

Ваш ответ на вопрос