Функция дублирует ввод как и должна но добавляется "Мусор" - 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, завершая работу программы.