@im_noob

Где здесь путаница?

Задание такое:
Вставить заданный символ в заданный ряд через каждые пару символов.

Мне говорят, что здесь путаница с кучей. Код полностью рабочий и соответствует заданию
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAXSTR 128
char* InputSymbol(char* Stri, char symbol);
int main() {
    char s[MAXSTR], symbol;
    printf("Input = \n");
    gets(s, MAXSTR);
    printf("Input symbol = \n");
    scanf_s("%c", &symbol);
    printf("%s\n", InputSymbol(s, symbol));

    _getch();
    return 0;
}
char* InputSymbol(char* Stri, char symbol)
{
    int n = strlen(Stri), i = 0, j = 0, k = 0;

    char* r = (char*)malloc(2 * n);

    for (i = 0; i < n; i++)
    {
        r[j++] = Stri[i];

        k++;
        if (k == 2)
        {
            r[j++] = symbol;
            k = 0;
        }
        r[j] = '\0';

    }

    return r;
}
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Зачем это
r[j] = '\0';
в цикле? Вынесите из цикла.
Путаницу в куче я вижу только в том смысле, что памяти выделяется больше, чем нужно. Можно этот момент подрихтовать.
Сам цикл я бы реализовал немного по другому - так чтобы в одной итерации цикла добавлялись сразу 2 символа из строки и один symbol. В этом случае нужно будет еще обработать оставшийся хвост, если количество символов не четное.

Добавлено: Проглядел отсутствие освобождения памяти. Оно необходимо, конечно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы