История изменений
Исправление Gyros, (текущая версия) :
- len не нужно проверять, т.к. в malloc-е стоит len+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, :
- len не нужно проверять, т.к. в malloc-е стоит len+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;
}