Функция пропускает первый символ исходной строки in и записывает остальные символы в строку out - C (СИ)
Формулировка задачи:
Помогите пожалуйста исправить ошибки в программе, и пожалуйста с объяснением моих ошибок, всё перечитала, туплю по-жёсткому...
Есть фрагмент программы на языке С (си):
Есть задание:
Функция пропускает первый символ исходной строки in и записывает осталь-
ные символы в строку out.
Есть две ошибки во фрагменте задания:
#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);
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 */ }
Объяснение кода листинга программы
- В функции
tailString
первым делом определяются две переменные:i
иsize
. Переменнаяi
инициализируется нулем, а переменнаяsize
пока не имеет значения. - Далее в цикле
while
переменнойi
присваиваются все символы исходной строкиin
, начиная с первого и до конца строки (до символа'\0'
). Переменнаяsize
увеличивается на единицу на каждой итерации цикла. - После выхода из цикла
while
переменнойsize
присваивается значениеi + 1
, так как размер строкиout
должен быть на единицу меньше, чем количество символов в исходной строкеin
. - В цикле
for
переменнойi
присваиваются все символы исходной строкиin
, начиная со второго символа и до предпоследнего. Значение каждой итерации цикла присваивается переменнойout
с учетом индексаi
. - В функции
main
определяется исходная строкаa
и вычисляется её размер. - Далее на основе размера строки
a
выделяется память под новую строкуb
с помощью функцииmalloc
. При этом память под последний символ не выделяется, поэтому вычитается единица из размера строкиa
. - Затем вызывается функция
tailString
с передачей в неё исходной строкиa
и новой строкиb
. - После этого выводится на экран новая строка
b
с помощью функцииprintf
. - И наконец, с помощью функции
free
освобождается выделенная память под строкуb
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д