Функция дублирует ввод как и должна но добавляется "Мусор" - 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;
- }
Решение задачи: «Функция дублирует ввод как и должна но добавляется "Мусор"»
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;
- }
Объяснение кода листинга программы
- В функции
duplicate
создается новая строкаnewStr
равнаяNULL
. - Вычисляется новая длина строки
newLength
- удваивается длина исходной строкиstr
и добавляется 1. - С помощью
malloc
выделяется память под новую строкуnewStr
длинойnewLength
. - Если память успешно выделена, то происходит копирование исходной строки
str
в новую строкуnewStr
иnewStr + strlen(str)
с помощью функцииmemcpy
. - В конце новой строки
newStr
добавляется символ конца строки\0
. - Функция возвращает новую строку
newStr
. - В функции
main
создается строкаs1
равнаяThis is a test!
. - Строка
s1
передается в функциюduplicate
и сохраняется в переменнойs2
. - С помощью функции
printf
выводится содержимое переменнойs2
. - С помощью функции
free
освобождается память, выделенная под строкуs2
. - Функция
main
возвращает 0, завершая работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д