Sdílet prostřednictvím


_strdup, _wcsdup, _mbsdup

Duplikuje řetězce.

Důležité

_mbsdupnelze použít v aplikacích, které se spouští v prostředí Windows Runtime. Další informace najdete v tématu Funkce CRT, které nejsou v aplikacích Univerzální platforma Windows podporované.

Syntaxe

char *_strdup(
   const char *strSource
);
wchar_t *_wcsdup(
   const wchar_t *strSource
);
unsigned char *_mbsdup(
   const unsigned char *strSource
);

Parametry

strSource
Zdrojový řetězec ukončený hodnotou null.

Vrácená hodnota

Každá z těchto funkcí vrátí ukazatel na umístění úložiště pro zkopírovaný řetězec nebo NULL pokud úložiště nelze přidělit.

Poznámky

Funkce _strdup volá malloc přidělení prostoru úložiště pro kopii strSource a potom zkopíruje strSource přidělený prostor.

_wcsdupa _mbsdup jsou širokoznakové a vícebajtové verze ._strdup Argumenty a návratová hodnota jsou řetězce širokého znaku _wcsdup . Argumenty a návratová _mbsdup hodnota jsou řetězce s vícebajtovými znaky. Tyto tři funkce se chovají stejně jinak.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Mapování rutin obecného textu

TCHAR.H Rutinní _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_tcsdup _strdup _mbsdup _wcsdup

Vzhledem k tomu _strdup , že volání malloc přidělení prostoru úložiště pro kopii strSource, je vhodné vždy uvolnit tuto paměť voláním free rutiny ukazatele, který je vrácen voláním _strdup.

Pokud _DEBUG a _CRTDBG_MAP_ALLOC jsou definovány _strdup a _wcsdup jsou nahrazeny voláními _strdup_dbg a _wcsdup_dbg, aby bylo možné ladit přidělení paměti. Další informace naleznete v tématu _strdup_dbg, _wcsdup_dbg.

Požadavky

Rutina Požadovaný hlavičkový soubor
_strdup <string.h>
_wcsdup <string.h> nebo <wchar.h>
_mbsdup <mbstring.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

// 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

Viz také

Manipulace s řetězci
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