Функция Strcpy () в C

Операторы C Switch Case Программирование и разработка

В этом руководстве мы обсудим, как использовать функцию strcpy () на языке C. Функция strcpy () является частью стандартной библиотеки C и используется для выполнения операций копирования строк. Он включен в файл заголовка string.h и должен быть импортирован перед использованием функции.

Основное использование

Синтаксис функции strcpy:

char* strcpy(char* dest, const char* src);

Функция strcpy () используется для копирования строки, на которую указывает указатель источника (src), в место назначения (dest). Он принимает аргументы с двумя указателями на char или массив символов. Функция копирует все символы из исходной строки в место назначения. Функция также копирует завершающий нулевой символ из источника в место назначения. Она возвращает адрес указателя целевой строки.

Чтобы гарантировать, что функция strcpy () не изменяет исходную строку, аргументу источника (src) предшествует модификатор константа.

Пример 1

Следующая простая программа демонстрирует, как работает функция strcpy ().

#include <stdio.h>
#include <string.h>

int main() {
char src[] = «C programming»;
char dest[100];

printf(«Source string before copy: %s \n«, src);
printf(«Destination string before copy: %s \n«, dest);

strcpy(dest, src);

printf(«Source string after copy: %s \n«, src);
printf(«Destination string after copy: %s \n«, dest);

return ;

}

После запуска программы, описанной выше, значение целевой строки должно содержать значение исходной строки после выполнения функции strcpy ().

Пример 2

Давайте возьмем еще один пример, где строка назначения уже содержит значение. Например: предположим, что у нас есть пример программы:

#include <stdio.h>
#include <string.h>

int main() {
char src[] = «C programming»;
char dest[] = «Hello world from C programming»;

printf(«Source string before copy: %s \n«, src);
printf(«Destination string before copy: %s \n«, dest);

strcpy(dest, src);

printf(«Source string after copy: %s \n«, src);
printf(«Destination string after copy: %s \n«, dest);

return ;

Как показано в приведенном выше примере, целевая строка уже содержит массив символов. Как только мы вызываем функцию strcpy (), ее содержимое перезаписывается новым значением исходной строки.

Следовательно, функция strcpy () не добавляет содержимое исходной строки к месту назначения. Вместо этого он полностью перезаписывает целевую строку новым значением.

Вместо этого он полностью перезаписывает целевую строку новым значением

Пример 3

Возьмем пример, показанный ниже, где размер целевой строки слишком мал, чтобы вместить исходную строку.

#include <stdio.h>
#include <string.h>

int main() {
char src[] = «C programming»;
char dest[10];

printf(«Source string before copy: %s \n«, src);
printf(«Destination string before copy: %s \n«, dest);

strcpy(dest, src);

printf(«Source string after copy: %s \n«, src);
printf(«Destination string after copy: %s \n«, dest);

return ;

}

Если вы запустите указанную выше программу, она не вылетит. Однако, как вы можете видеть, размер целевой строки слишком мал, чтобы вместить исходную строку.

Поскольку функция strcpy () не проверяет, достаточен ли размер целевой строки для хранения исходной строки, она начнет копировать строку, пока не достигнет нулевого завершающего символа. Это приведет к переполнению программы и перезаписи участков памяти, которые могут быть предназначены для других переменных.

В нашем примере выше это приведет к тому, что программа перезапишет саму исходную строку с выводом, как показано:

В нашем примере выше это приведет к тому, что программа

Пример 4

Другой распространенной ошибкой является передача строкового литерала функции strcpy () в качестве строки назначения.

Например:

#include <stdio.h>
#include <string.h>

int main() {
char src[] = «C programming»;
printf(«Source string before copy: %s \n«, src);

strcpy(» «, src);
printf(«Source string after copy: %s \n«, src);
return ;

}

Приведенный выше пример программы вызовет ошибку, и программа выйдет из строя с ошибкой сегментации.

Заключение

В этом кратком руководстве мы обсудили различные сценарии использования функции C strcpy () для копирования строки из источника в место назначения. Хорошо убедиться, что функция strcpy () работает правильно, чтобы избежать таких ошибок, как переполнение памяти.

Оцените статью
bestprogrammer.ru
Добавить комментарий