strcpy c что это

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

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

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

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

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

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

Пример 1

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

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

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

Пример 2

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

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

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

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

Пример 3

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

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

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

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

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

Читайте также:  vesinfo что это такое

Пример 4

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

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

Заключение

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

Источник

_mbscpy не может использоваться в приложениях, выполняемых в среда выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.

Синтаксис

Параметры

strDestination
Конечная строка.

strSource
Исходная строка, завершающаяся символом NULL.

Возвращаемое значение

Каждая из этих функций возвращает строку назначения. Нет зарезервированных возвращаемых значений для указания ошибки.

Remarks

Так как не strcpy проверяет наличие достаточного места в стрдестинатион перед копированием, это может strSource привести к переполнению буфера. Поэтому рекомендуется использовать strcpy_s вместо него.

В C++ эти функции имеют шаблонные перегрузки, которые вызывают более новые и безопасные аналоги этих функций. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.

Универсальное текстовое сопоставление функций

TCHAR.H ассемблер _UNICODE & _MBCS не определено _MBCS определяется _UNICODE определяется
_tcscpy strcpy _mbscpy wcscpy

Требования

Подпрограмма Обязательный заголовок
strcpy
wcscpy либо
_mbscpy

Дополнительные сведения о совместимости см. в статье Compatibility.

Источник

_mbscpy_s и _mbscpy_s_l не могут использоваться в приложениях, выполняемых в среда выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.

Синтаксис

Параметры

dest
Расположение строкового буфера назначения.

src
Исходная строка, завершающаяся нулем.

locale
Используемый языковой стандарт.

Возвращаемое значение

Ноль в случае успешного выполнения; в противном случае — код ошибки.

Ситуации, которые могут привести к ошибке

dest dest_size src Возвращаемое значение Содержимое dest
NULL any any EINVAL не изменено
any any NULL EINVAL dest[0] Задайте значение 0.
any 0 или слишком мал any ERANGE dest[0] Задайте значение 0.

Remarks

Если dest или src является пустым указателем или если размер строки назначения dest_size слишком мал, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если выполнение может быть продолжено, эти функции возвращают EINVAL и устанавливают значение, errno EINVAL Если dest или src является пустым указателем, и возвращают ERANGE и устанавливают errno в, ERANGE когда строка назначения слишком мала.

После успешного выполнения конечная строка всегда завершается нулем.

В C++ использование данных функций упрощено наличием шаблонных перегрузок, которые могут автоматически определять длину буфера, а также автоматически заменять более старые, незащищенные функции их новыми безопасными аналогами. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.

Универсальное текстовое сопоставление функций

TCHAR.H ассемблер _UNICODE & _MBCS не определено _MBCS определяется _UNICODE определяется
_tcscpy_s strcpy_s _mbscpy_s wcscpy_s

Требования

Подпрограмма Обязательный заголовок
strcpy_s
wcscpy_s либо
_mbscpy_s

Эти функции относятся только к Microsoft. Дополнительные сведения о совместимости см. в статье Compatibility.

Пример

В отличие от кода качества производства, этот пример вызывает безопасные строковые функции без проверки на наличие ошибок:

При создании кода C++ версии шаблона могут быть проще в использовании.

Источник

Функции для работы со строками в C++

После того, как мы с вами познакомились со строками и символьными массивами в C++, рассмотрим самые распространённые функции для работы с ними. Урок будет полностью построен на практике. Мы будем писать собственные программы-аналоги для обработки строк и параллельно использовать стандартные функции библиотеки cstring ( string.h – в старых версиях). Так вы примерно будете себе представлять, как они устроены. К стандартным функциям библиотеки cstring относятся:

Это конечно не все функции, а только те, которые мы разберём в этой статье.

strlen() (от слова length – длина)

Наша программа, которая подсчитает количество символов в строке:

Так будет выглядеть код, с заменой нашего участка кода на функцию strlen() :

Результат будет и в первой программе и во второй аналогичен:

strcat() (от слова concatenation – соединение)

Программа, которая в конец одной строки, дописывает вторую строку. Другими словами – объединяет две строки.

Реализация объединения двух строк, используя стандартную функцию, заняла одну строчку кода в программе – 14-я строка.

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

strcpy() (от слова copy – копирование)

Реализуем копирование одной строки и её вставку на место другой строки.

Источник

Strcpy c что это

ОБЗОР

ОПИСАНИЕ

Функция strncpy() сходна, за исключением того, что скопировано будет только первые n байт из src. Внимание: если в первых n байт из src не окажется нулевого байта, то строка в dest также не будет завершена нулевым байтом.

Если длина src меньше n, strncpy() дописывает в dest нулевые байты, чтобы убедиться, что всего было записано n байт.

Простейшей реализацией strncpy() может быть:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).

Интерфейс Атрибут Значение
strcpy(), strncpy() безвредность в нитях безвредно (MT-Safe)

СООТВЕТСТВИЕ СТАНДАРТАМ

ЗАМЕЧАНИЯ

Единственным правильным (и предполагаемым) использованием strncpy() является копирование C-строки в буфер фиксированной длины с одновременной проверкой того, что буфер не переполнен и неиспользованные байты в целевом буфере обнулены (для исключения возможной утечки информации в случае, если буфер будет записан на носитель или передан другому процессу через межпроцессовое общение).

Если в первых n байт src не будет завершающего нулевого байта, strncpy() создаст ничем не ограниченную строку в dest. Если размер buf равен buflen, вы можете принудительно завершить строку с помощью следующего кода:

strlcpy()

size_t strlcpy(char *dest, const char *src, size_t size);

Эта функция подобна strncpy(), но копирует не более size-1 байт в dest, всегда добавляет конечный байт null и не дополняет назначение (помимо этого) байтами null. В данной функции исправлены некоторые проблемы strcpy() и strncpy(), но вызывающий по-прежнему должен обрабатывать возможность потери данных, если значение size окажется слишком мало. Возвращаемое значение функции — длина src, что позволяет легко обнаружить усечение: если возвращаемое значение больше или равно size, то выполнялось усечение. Если потеря данных неприемлема, то вызывающий должен или проверять аргументы перед вызовом, или проверять возвращаемое значение. Функция strlcpy() отсутствует в glibc и не стандартизована в POSIX, но доступна в Linux из библиотеки libbsd.

Источник

Читайте также:  какие формы соединения костей вам известны каковы их строение и функции
Информ портал о технике и не только