Funkcje strdup() i strndup() w C/C++
The strdup() I strndup() funkcje służą do powielania ciągu.
strdup():
Składnia: char *strdup(const char *s);
Ta funkcja zwraca wskaźnik do zakończonego znakiem null ciągu bajtów, który jest duplikatem ciągu wskazywanego przez S . Uzyskana pamięć jest wykonywana dynamicznie przy użyciu malloc i dlatego można ją zwolnić za pomocą funkcji free() .
Zwraca wskaźnik do zduplikowanego ciągu S .
Poniżej znajduje się implementacja C pokazująca użycie funkcji strdup() w C:
C
// C program to demonstrate strdup()> #include> #include> int> main()> {> > char> source[] => 'GeeksForGeeks'> ;> > // A copy of source is created dynamically> > // and pointer to copy is returned.> > char> * target = strdup(source);> > printf> (> '%s'> , target);> > return> 0;> }> |
Wyjście:
GeeksForGeeks
strndup():
składnia: char *strndup(const char *s, size_t n);
Ta funkcja jest podobna do strdup(), ale co najwyżej kopiuje N bajty.
Notatka : Jeśli s jest dłuższe niż n, kopiowanych jest tylko n bajtów, a na końcu dodawana jest wartość NULL („ ”).
Poniżej znajduje się implementacja C pokazująca użycie funkcji strndup() w C:
C
// C program to demonstrate strndup()> #include> #include> int> main()> {> > char> source[] => 'GeeksForGeeks'> ;> > // 5 bytes of source are copied to a new memory> > // allocated dynamically and pointer to copied> > // memory is returned.> > char> * target = strndup(source, 5);> > printf> (> '%s'> , target);> > return> 0;> }> |
Wyjście:
Geeks
Zobaczmy różnice w formie tabelarycznej -:
| strdup() | strndup() | |
| 1. | Służy do zwracania wskaźnika do łańcucha bajtów zakończonego znakiem null, | Służy do zwracania wskaźnika do łańcucha bajtów zakończonego znakiem null |
| 2. | Jego składnia to -: char * strdup( const char *str1 ); | Jego składnia to -: char *strndup( const char *str, size_t size ); |
| 3. | Jest zdefiniowany w plik nagłówkowy | Jest zdefiniowany w plik nagłówkowy |
| 4. | Do duplikowania wystarczy jeden parametr będący wskaźnikiem do łańcucha bajtów zakończonego znakiem null | Przyjmuje dwa parametry, którymi są -: 2. maksymalna liczba bajtów do skopiowania z str |
| 5. | Zwracaną wartością jest wskaźnik do nowo przydzielonego ciągu. | Zwraca wskaźnik zerowy, jeśli wystąpił błąd. |
Odniesienie: Człowiek z Linuksem(7)