_strdup
, _wcsdup
, _mbsdup
Повторяющиеся строки.
Важно!
_mbsdup
не может использоваться в приложениях, запускаемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.
Синтаксис
char *_strdup(
const char *strSource
);
wchar_t *_wcsdup(
const wchar_t *strSource
);
unsigned char *_mbsdup(
const unsigned char *strSource
);
Параметры
strSource
Исходная строка, завершающаяся символом NULL.
Возвращаемое значение
Каждая из этих функций возвращает указатель на расположение хранилища для скопированной строки или NULL
если хранилище не может быть выделено.
Замечания
Функция _strdup
вызывает malloc
выделение дискового пространства для копии strSource
, а затем копирует strSource
в выделенное пространство.
Функции _wcsdup
и _mbsdup
являются версиями функции _strdup
для расширенных и многобайтовых символов. Аргументы и возвращаемые значения _wcsdup
являются строками с широкими символами. Аргументы и возвращаемое значение _mbsdup
являются многобайтовыми строками. В остальном эти три функции ведут себя идентично.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставления подпрограмм универсального текста
TCHAR.H Обычной |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tcsdup |
_strdup |
_mbsdup |
_wcsdup |
Так как _strdup
вызовы malloc
выделения дискового пространства для копии strSource
рекомендуется всегда освобождать эту память, вызывая free
подпрограмму на указатель, возвращаемый вызовом _strdup
.
Если _DEBUG
и _CRTDBG_MAP_ALLOC
определены, _strdup
_wcsdup
а также заменяются вызовами _strdup_dbg
и _wcsdup_dbg
позволяют выполнять отладку выделения памяти. Дополнительные сведения см. в разделе _strdup_dbg
, _wcsdup_dbg
.
Требования
Маршрут | Обязательный заголовок |
---|---|
_strdup |
<string.h> |
_wcsdup |
<string.h> или <wchar.h> |
_mbsdup |
<mbstring.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_strdup.c
#include <string.h>
#include <stdio.h>
int main( void )
{
char buffer[] = "This is the buffer text";
char *newstring;
printf( "Original: %s\n", buffer );
newstring = _strdup( buffer );
printf( "Copy: %s\n", newstring );
free( newstring );
}
Original: This is the buffer text
Copy: This is the buffer text
См. также
Обработка строк
memset
, wmemset
strcat
, wcscat
, _mbscat
strcmp
, wcscmp
, _mbscmp
strncat
, _strncat_l
, wcsncat
, _wcsncat_l
, _mbsncat
, _mbsncat_l
strncmp
, wcsncmp
, _mbsncmp
, _mbsncmp_l
strncpy
, _strncpy_l
, wcsncpy
, _wcsncpy_l
, _mbsncpy
, _mbsncpy_l
_strnicmp
, _wcsnicmp
, _mbsnicmp
, _strnicmp_l
, _wcsnicmp_l
, _mbsnicmp_l
strrchr
, wcsrchr
, _mbsrchr
, _mbsrchr_l
strspn
, wcsspn
, _mbsspn
, _mbsspn_l