Функция, увеличение строки 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