Функция пропускает первый символ исходной строки 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.