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

Узнай цену своей работы

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

Функция дублирует ввод как и должна но пробавляются "Мусор"
Листинг программы
  1. char *duplicate(char *str)
  2. {
  3. char *s={NULL};
  4. int i;
  5. int j;
  6. printf("The current string is: ");
  7. present(str);
  8. s = (char *)malloc(2*strlen(str)*sizeof(char)-1);
  9. if(s == NULL) {printf("Sorry no memory"); return NULL;}
  10. _flushall();
  11. for (i=0;i<strlen(str);i++)
  12. s[i]=str[i];
  13. for (j=0;j<strlen(str);j++)
  14. s[j+strlen(str)]=str[j];
  15. printf("The duplicated string is: ");
  16. present(s);
  17. free(str);
  18. return s;
  19. }
Что это может быть ? Спасибо

Решение задачи: «Функция дублирует ввод как и должна но добавляется "Мусор"»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char* duplicate(const char* const str)
  6. {
  7.   char* newStr = NULL;
  8.   size_t newLength = (strlen(str) * 2 + 1);
  9.  
  10.   newStr = malloc(newLength * sizeof(*newStr));
  11.   if (newStr != NULL)
  12.   {
  13.     memcpy(newStr, str, strlen(str) * sizeof(*str));
  14.     memcpy(newStr + strlen(str), str, strlen(str) * sizeof(*str));
  15.     newStr[newLength - 1] = '\0';
  16.   }
  17.  
  18.   return newStr;
  19. }
  20.  
  21. int main(void)
  22. {
  23.   char s1[] = "This is a test!";
  24.   char* s2 = NULL;
  25.  
  26.   s2 = duplicate(s1);
  27.  
  28.   printf("'%s'\n", s2);
  29.  
  30.   free(s2);
  31.  
  32.   return 0;
  33. }

Объяснение кода листинга программы

  1. В функции duplicate создается новая строка newStr равная NULL.
  2. Вычисляется новая длина строки newLength - удваивается длина исходной строки str и добавляется 1.
  3. С помощью malloc выделяется память под новую строку newStr длиной newLength.
  4. Если память успешно выделена, то происходит копирование исходной строки str в новую строку newStr и newStr + strlen(str) с помощью функции memcpy.
  5. В конце новой строки newStr добавляется символ конца строки \0.
  6. Функция возвращает новую строку newStr.
  7. В функции main создается строка s1 равная This is a test!.
  8. Строка s1 передается в функцию duplicate и сохраняется в переменной s2.
  9. С помощью функции printf выводится содержимое переменной s2.
  10. С помощью функции free освобождается память, выделенная под строку s2.
  11. Функция main возвращает 0, завершая работу программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут