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