Функция, увеличение строки s1 на строку s2 - C (СИ)

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

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

Не могу понять, почему не происходит нормального копирования. Укажите на ошибку пожалуйста. Вот код:
Листинг программы
  1. #include <stdio.h>
  2. #include <locale.h>
  3. // подсчёт количества символов в строке
  4. int strlenn(char* string);
  5. //увеличения строки s1 на s2
  6. void strrcat( char *s1, char *s2);
  7.  
  8. int main()
  9. {
  10. char s[] = "При", s1[] = "вет";
  11. strrcat(s, s1);
  12. puts(s1);
  13. printf("%d", strlenn("abcdef"));
  14. return 0;
  15. }
  16.  
  17. void strrcat( char *s1, char *s2)
  18. {
  19. int len = 0;// начальная длина
  20. while( *s1 ) s1++;// пока разыменованное значение не равно нулю выполняется оператор передвижения указателя
  21. if(!(len)) len = strlenn(s2);// если лен - ложь, присваиваем лен количество элементов строки s2
  22. while(len && *s2)// пока истинны выражения
  23. {
  24. *s1++ = *s2++;//разыменовываем, присваивам посимвольно и передвигаем указатель
  25. len--;
  26. }
  27. *s1 = '\0';// символ конца строки
  28. }
  29. int strlenn(char* string)// аргумент для функции. указатель string, указывающуй на тип данных char, после ввода значения мы получаем адрес на начало массива
  30. {
  31. char *s=string;// присваиваем указателю s адрес указателя string, s тоже указывает на начало строки
  32. while(*s++ && *s != '\0');// разыменовываем поэлементно и сдвигаем указатель, пока не достигнем нуля-терминатора
  33. int count=s-string;// разность адресов указателей. первый указатель находится на конце строки, второй на начале.
  34. return(count);
  35. }
Этот момент:
Листинг программы
  1. void strrcat( char *s1, char *s2)
  2. {
  3. int len = 0;// начальная длина
  4. while( *s1 ) s1++;// пока разыменованное значение не равно нулю выполняется оператор передвижения указателя
  5. if(!(len)) len = strlenn(s2);// если лен - ложь, присваиваем лен количество элементов строки s2
  6. while(len && *s2)// пока истинны выражения
  7. {
  8. *s1++ = *s2++;//разыменовываем, присваивам посимвольно и передвигаем указатель
  9. len--;
  10. }
  11. *s1 = '\0';// символ конца строки
  12. }

Решение задачи: «Функция, увеличение строки s1 на строку s2»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <malloc.h>
  5. // подсчёт количества символов в строке
  6. int strlenn(char* string);
  7.  
  8. //увеличения строки s1 на s2
  9. void strrcat( char *s1, char *s2);
  10.  
  11. int main()
  12. {
  13.     char s[20] = "При", s1[20] = "вет";
  14.     strrcat(s, s1);
  15.     printf("%d s=%s\n", strlenn(s), s);
  16.     return 0;
  17. }
  18.  
  19. void strrcat( char *s1, char *s2)
  20. {
  21.     while( *s1 ) s1++;
  22.     while(*s2)
  23.     {
  24.         *s1++ = *s2++;
  25.     }
  26.     *s1 = '\0';// символ конца строки
  27. }
  28.  
  29. int strlenn(char* s)
  30. {
  31.     int count = 0;
  32.     while(*s++) count++;
  33.     return(count);
  34. }

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

  1. Подключение необходимых библиотек для работы со строками в коде
  2. Определение двух функций: strlenn(вычисление длины строки) и strrcat(увеличение строки s1 на s2)
  3. Создание двух массивов символов s и s1, присваивание им значений Привет и вет соответственно
  4. Вызов функции strrcat(s, s1) для увеличения строки s на s1
  5. Вывод на экран длины полученной строки и её значения с помощью функции printf
  6. Выход из программы с результатом выполнения задачи
  7. В функции strrcat происходит поиск конца строки s1 и добавление символов из строки s2 в конец строки s1
  8. В функции strlenn происходит подсчёт количества символов в строке s с помощью счётчика count и цикла while
  9. Возвращение значения длины строки из функции strlenn в main с помощью оператора return

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.625 из 5

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

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

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