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