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