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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void tailString(char* in, char* out) {
  5.   int i = 0;
  6.   int size = 0;
  7.   while (in[i] != '\0') i++; /* 2.1 */
  8.   size = i + 1; /* 2.1 */
  9.  
  10.   for (i = 0; i < size - 1; i++) {
  11.     out[i] = in[i + 1];
  12.   }
  13. }
  14.  
  15. int main() {
  16.   char a[] = "clock";
  17.   int size = sizeof(a) / sizeof(*a);
  18.   char* b = (char *) malloc (size * sizeof(char)-1);
  19.   tailString(a, b);
  20.   printf("Результат: %s\n",b);
  21.   free(b); /* 2.2 */
  22. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы