Функция, увеличение строки s1 на строку s2 - C (СИ)
Формулировка задачи:
Не могу понять, почему не происходит нормального копирования. Укажите на ошибку пожалуйста.
Вот код:
Листинг программы
- #include <stdio.h>
- #include <locale.h>
- // подсчёт количества символов в строке
- int strlenn(char* string);
- //увеличения строки s1 на s2
- void strrcat( char *s1, char *s2);
- int main()
- {
- char s[] = "При", s1[] = "вет";
- strrcat(s, s1);
- puts(s1);
- printf("%d", strlenn("abcdef"));
- return 0;
- }
- void strrcat( char *s1, char *s2)
- {
- int len = 0;// начальная длина
- while( *s1 ) s1++;// пока разыменованное значение не равно нулю выполняется оператор передвижения указателя
- if(!(len)) len = strlenn(s2);// если лен - ложь, присваиваем лен количество элементов строки s2
- while(len && *s2)// пока истинны выражения
- {
- *s1++ = *s2++;//разыменовываем, присваивам посимвольно и передвигаем указатель
- len--;
- }
- *s1 = '\0';// символ конца строки
- }
- int strlenn(char* string)// аргумент для функции. указатель string, указывающуй на тип данных char, после ввода значения мы получаем адрес на начало массива
- {
- char *s=string;// присваиваем указателю s адрес указателя string, s тоже указывает на начало строки
- while(*s++ && *s != '\0');// разыменовываем поэлементно и сдвигаем указатель, пока не достигнем нуля-терминатора
- int count=s-string;// разность адресов указателей. первый указатель находится на конце строки, второй на начале.
- return(count);
- }
Этот момент:
Листинг программы
- void strrcat( char *s1, char *s2)
- {
- int len = 0;// начальная длина
- while( *s1 ) s1++;// пока разыменованное значение не равно нулю выполняется оператор передвижения указателя
- if(!(len)) len = strlenn(s2);// если лен - ложь, присваиваем лен количество элементов строки s2
- while(len && *s2)// пока истинны выражения
- {
- *s1++ = *s2++;//разыменовываем, присваивам посимвольно и передвигаем указатель
- len--;
- }
- *s1 = '\0';// символ конца строки
- }
Решение задачи: «Функция, увеличение строки s1 на строку s2»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <malloc.h>
- // подсчёт количества символов в строке
- int strlenn(char* string);
- //увеличения строки s1 на s2
- void strrcat( char *s1, char *s2);
- int main()
- {
- char s[20] = "При", s1[20] = "вет";
- strrcat(s, s1);
- printf("%d s=%s\n", strlenn(s), s);
- return 0;
- }
- void strrcat( char *s1, char *s2)
- {
- while( *s1 ) s1++;
- while(*s2)
- {
- *s1++ = *s2++;
- }
- *s1 = '\0';// символ конца строки
- }
- int strlenn(char* s)
- {
- int count = 0;
- while(*s++) count++;
- return(count);
- }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со строками в коде
- Определение двух функций: strlenn(вычисление длины строки) и strrcat(увеличение строки s1 на s2)
- Создание двух массивов символов s и s1, присваивание им значений
Привет
ивет
соответственно - Вызов функции strrcat(s, s1) для увеличения строки s на s1
- Вывод на экран длины полученной строки и её значения с помощью функции printf
- Выход из программы с результатом выполнения задачи
- В функции strrcat происходит поиск конца строки s1 и добавление символов из строки s2 в конец строки s1
- В функции strlenn происходит подсчёт количества символов в строке s с помощью счётчика count и цикла while
- Возвращение значения длины строки из функции strlenn в main с помощью оператора return
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д