Функция пропускает первый символ исходной строки in и записывает остальные символы в строку out - C (СИ)

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

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

Помогите пожалуйста исправить ошибки в программе, и пожалуйста с объяснением моих ошибок, всё перечитала, туплю по-жёсткому... Есть фрагмент программы на языке С (си):
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
 
 void tailString(char* in, char* out, int size) {
 int i;
 for (i = 0; i < size - 1; i++) {
 out[i] = in[i + 1];
 }
 }
 
 int main() {
 char a[] = "clock";
 int size = sizeof(a) / sizeof(*a) - 1;
 char *b = (char *) malloc (size * sizeof(char)-1);
 tailString(a, b, size);
 printf("Результат: %s\n",b);
 }
Есть задание:
 void tailString (char *in, char *out);
Функция пропускает первый символ исходной строки in и записывает осталь- ные символы в строку out.
 char a[] = "clock"
 char b[sizeof(a) / sizeof(*a)];
 tailString(a, b); // "lock"
Есть две ошибки во фрагменте задания:

Решение задачи: «Функция пропускает первый символ исходной строки in и записывает остальные символы в строку out»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
void tailString(char* in, char* out) {
  int i = 0;
  int size = 0;
  while (in[i] != '\0') i++; /* 2.1 */
  size = i + 1; /* 2.1 */
 
  for (i = 0; i < size - 1; i++) {
    out[i] = in[i + 1];
  }
}
 
int main() {
  char a[] = "clock";
  int size = sizeof(a) / sizeof(*a);
  char* b = (char *) malloc (size * sizeof(char)-1);
  tailString(a, b);
  printf("Результат: %s\n",b);
  free(b); /* 2.2 */
}

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

  1. В функции tailString первым делом определяются две переменные: i и size. Переменная i инициализируется нулем, а переменная size пока не имеет значения.
  2. Далее в цикле while переменной i присваиваются все символы исходной строки in, начиная с первого и до конца строки (до символа '\0'). Переменная size увеличивается на единицу на каждой итерации цикла.
  3. После выхода из цикла while переменной size присваивается значение i + 1, так как размер строки out должен быть на единицу меньше, чем количество символов в исходной строке in.
  4. В цикле for переменной i присваиваются все символы исходной строки in, начиная со второго символа и до предпоследнего. Значение каждой итерации цикла присваивается переменной out с учетом индекса i.
  5. В функции main определяется исходная строка a и вычисляется её размер.
  6. Далее на основе размера строки a выделяется память под новую строку b с помощью функции malloc. При этом память под последний символ не выделяется, поэтому вычитается единица из размера строки a.
  7. Затем вызывается функция tailString с передачей в неё исходной строки a и новой строки b.
  8. После этого выводится на экран новая строка b с помощью функции printf.
  9. И наконец, с помощью функции free освобождается выделенная память под строку b.

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


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

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

9   голосов , оценка 4.444 из 5
Похожие ответы