LINUX.ORG.RU

История изменений

Исправление Gyros, (текущая версия) :

  1. len не нужно проверять, т.к. в malloc-е стоит len+1.

Если подать пустую строку, то вернется созданный пустой дубликат.

  1. Если же входная строка NULL, то и вернуть должны NULL. Ошибкой в самой str_dup это считаться не должно.

В библиотечной strdup С23

If an error occurs, a null pointer is returned and errno might be set. 

Внутри str_dup м.б. только одна ошибка от malloc-а.

Поэтому исправленная версия:

char *str_dup(char const *in)
{
    if ( !in ) return NULL;
    size_t len = strlen(in);
    char *out = malloc(len+1);
    if (!out)
    {
       fprintf(stderr, "str_dup error: Memory allocation failed!\n");
       exit(EXIT_FAILURE);
    }
    strncpy(out, in, len+1);
    return out;
}

Исходная версия Gyros, :

  1. len не нужно проверять, т.к. в malloc-е стоит len+1.

Если подать пустую строку, то вернется созданный пустой дубликат.

  1. Если же входная строка NULL, то и вернуть должны NULL. Ошибкой в самой str_dup это считаться не должно.

В библиотечной strdup С23

If an error occurs, a null pointer is returned and errno might be set. 

Внутри str_dup м.б. только одна ошибка от malloc-а.

Поэтому

char *str_dup(char const *in)
{
    if ( !in ) return NULL;
    size_t len = strlen(in);
    char *out = malloc(len+1);
    if (!out)
    {
       fprintf(stderr, "str_dup error: Memory allocation failed!\n");
       exit(EXIT_FAILURE);
    }
    strncpy(out, in, len+1);
    return out;
}