Функция дублирует ввод как и должна но добавляется "Мусор" - C (СИ)

Формулировка задачи:

Функция дублирует ввод как и должна но пробавляются "Мусор"
char *duplicate(char *str)
{
    char *s={NULL};
    int   i;
    int   j;
 
    printf("The current string is: ");
    present(str);
 
     s = (char *)malloc(2*strlen(str)*sizeof(char)-1);         
 
    if(s == NULL) {printf("Sorry no memory"); return NULL;}  
    _flushall();    
 
    for (i=0;i<strlen(str);i++)                             
        s[i]=str[i];
    for (j=0;j<strlen(str);j++)
        s[j+strlen(str)]=str[j];
 
    printf("The duplicated string is: ");
    present(s);
    free(str);
    return s;
    
}
Что это может быть ? Спасибо

Код к задаче: «Функция дублирует ввод как и должна но добавляется "Мусор" - C (СИ)»

textual
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char* duplicate(const char* const str)
{
  char* newStr = NULL;
  size_t newLength = (strlen(str) * 2 + 1);
 
  newStr = malloc(newLength * sizeof(*newStr));
  if (newStr != NULL)
  {
    memcpy(newStr, str, strlen(str) * sizeof(*str));
    memcpy(newStr + strlen(str), str, strlen(str) * sizeof(*str));
    newStr[newLength - 1] = '\0';
  }
 
  return newStr;
}
 
int main(void)
{
  char s1[] = "This is a test!";
  char* s2 = NULL;
 
  s2 = duplicate(s1);
 
  printf("'%s'\n", s2);
 
  free(s2);
 
  return 0;
}

9   голосов, оценка 3.667 из 5


СОХРАНИТЬ ССЫЛКУ