Использование strcpy()
Часть раздела Logic & Flow путешествия по C на Coddy — урок 16 из 63.
Вы узнали, как находить длину строк с помощью strlen(), но что если вам нужно скопировать содержимое одной строки в другую? В языке C вы не можете использовать оператор присваивания (=) для копирования строк, как вы бы это сделали с обычными переменными.
Причина заключается в том, что строки — это массивы символов, и когда вы используете = с массивами, вы копируете только адрес памяти, а не само содержимое. Именно здесь функция strcpy() из библиотеки <string.h> становится необходимой.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // Копирует "Hello" в destinationФункция strcpy() принимает два аргумента: целевой массив (куда вы хотите скопировать) и исходную строку (то, что вы хотите скопировать). Она копирует каждый символ из источника в место назначения, включая нулевой терминатор.
Крайне важно, чтобы ваш целевой массив был достаточно велик, чтобы вместить всю исходную строку плюс нулевой терминатор. Если целевой массив слишком мал, strcpy() выполнит запись за пределами границ массива, что приведет к неопределенному поведению.
Эта функция является основополагающей для манипуляций со строками в C, позволяя дублировать строки, инициализировать строковые переменные существующим содержимым и подготавливать строки для дальнейшей обработки.
Задание
ЛегкоНапишите программу на языке C, которая демонстрирует копирование строк с использованием функции strcpy(). Ваша программа должна:
- Считать целое число
n, представляющее количество операций со строками. - Для каждой операции:
- Считать исходную строку (source string) из входных данных.
- Объявить массив символов с именем
destinationиз 100 элементов. - Использовать
strcpy()для копирования исходной строки в массив назначения. - Вывести как исходную строку, так и скопированную строку назначения.
- После всех операций продемонстрировать, что скопированные строки независимы:
- Изменив первый символ последнего массива назначения на 'X'.
- Выведя измененную строку назначения, чтобы показать, что она изменилась.
Не забудьте включить заголовочный файл <string.h> для использования функции strcpy().
Ваш вывод должен отображать результаты в следующем формате:
Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]Например, если входные данные:
3
hello
world
programmingВаш вывод должен быть:
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: XrogrammingЭта задача проверяет ваше понимание использования strcpy() для копирования содержимого строк из одного массива символов в другой, правильное выделение памяти для массивов назначения и демонстрирует, что скопированные строки не зависят от своих источников.
Шпаргалка
Для копирования строк в C используйте strcpy() из библиотеки <string.h>. Вы не можете использовать оператор присваивания (=) для копирования строк, так как он копирует только адреса памяти, а не само содержимое.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // Копирует "Hello" в destinationФункция strcpy() принимает два аргумента: массив назначения (куда вы хотите скопировать) и исходную строку (что вы хотите скопировать). Она копирует каждый символ из источника в место назначения, включая нулевой терминатор.
Массив назначения должен быть достаточно большим, чтобы вместить всю исходную строку плюс нулевой терминатор, чтобы избежать неопределенного поведения.
Попробуйте сами
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char source[100];
char destination[100];
// TODO: Напишите свой код здесь
// Используйте цикл для обработки n строковых операций
// Для каждой операции:
// - Считайте исходную строку
// - Используйте strcpy() для копирования исходной строки в целевую
// - Выведите обе строки в требуемом формате
// TODO: После цикла измените первый символ последней целевой строки
// и выведите измененную строку
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции