strcpy в C++: копирование строк
В данном уроке мы рассмотрим функцию strcpy
, доступную при подключении <cstring>
. Данная функция позволяет нам копировать строки в стиле C (массивы символов char[]
). Мы разберем несколько примеров использования данной фун кции, а в конце вы найдете упражнения, которые помогут вам закрепить изученный материал на практике.
Копирование строк с помощью strcpy
Прототип функции strcpy
имеет следующий вид:
char * strcpy ( char * destination, const char * source );
- Первым аргументом функция принимает указатель
destination
на место, куда будет скопирована строка. - Вторым аргументом
source
мы указываем, откуда нужно копировать. - Функция возвращает указатель на скопированную строку (указатель
destination
, который мы передали первым аргументом).
Сама функция будет копировать символы до тех пор, пока не дойдет до специального символа \0
, который означает конец строки:
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char source[] = "Использование функции strcpy";
char destination[sizeof(source)];
strcpy(destination, source);
cout << "source = " << source << endl;
cout << "destination = " << destination << endl;
return 0;
}
Вывод:
source = Использование функции strcpy
destination = Использование функции strcpy
Что будет выведено на экран?
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char source[] = "strcpy";
char destination[4];
strcpy(destination, source);
cout << "destination = " << destination << endl;
return 0;
}
Как самому реализовать strcpy
Теперь давайте попробуем реализовать функцию strcpy
сами, чтобы лучше понять, как она работает. Для этого нам нужно пройтись по строке source
, копируя символы в destination
. Условием завершения копирования будет достижение символа \0
:
#include <iostream>
using namespace std;
char* strcpy(char* destination, const char* source) {
char* current = destination;
// проходим по массиву до тех пор, пока не встретим '\0'
while (*source != '\0') {
// копируем символ
*current = *source;
// сдвигаем указатели на одну ячейку вперед
source++;
current++;
}
// последний штрих, указываем конец строки
*current = '\0';
// и нужно не забыть вернуть указатель на скопированную строку
return destination;
}
int main() {
char source[] = "Использование функции strcpy";
char destination[sizeof(source)];
strcpy(destination, source);
cout << "source = " << source << endl;
cout << "destination = " << destination << endl;
return 0;
}
Вывод:
source = Использование функции strcpy
destination = Использование функции strcpy
Вывод программы идентичен, поскольку наша функция strcpy
делает тоже самое, что и стандартная strcpy
из C++ библиотеки <cstring>
.
Упражнения
Конечно, давайте модифицируем первое упражнение:
-
Обратное копирование строки:
Напишите программу на C++, которая копирует строкуsource
в строкуdestination
, но в обратном порядке, используя функцию вашу собственную версиюstrcpy
. Например, если исходная строка “Привет”, то скопированная строка будет “тевирП”. Ваша программа должна отображать исходную строку и результат после копирования. -
Сравнение строк:
Напишите программу, которая сначала копирует строкуsource
вdestination
, а затем проверяет идентичны ли исходная строка и скопированная. Результат проверки (идентичны или нет) выводится на экран. -
Копирование строки с добавлением символов:
Модифицируйте свою версию функцииstrcpy
, чтобы перед скопированной строкой вdestination
добавлялась фраза “Копия: “. Таким образом, если исходная строка была “Привет, мир!”, результатом копирования будет “Копия: Привет, мир!“. Ваша программа должна отображать исходную строку и результат после копирования.
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение