strcpy(3) | Library Functions Manual | strcpy(3) |
NAZWA
stpcpy, strcpy, strcat - kopiuje lub łączy łańcuch znaków
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <string.h>
char *stpcpy(char *restrict dst, const char *restrict src); char *strcpy(char *restrict dst, const char *restrict src); char *strcat(char *restrict dst, const char *restrict src);
stpcpy():
Od glibc 2.10: _POSIX_C_SOURCE >= 200809L Przed glibc 2.10: _GNU_SOURCE
OPIS
- stpcpy()
- strcpy()
- Funkcje kopiują łańcuch, na który wskazuje src, do łańcucha w buforze, na który wskazuje dst. To programista jest odpowiedzialny za alokację odpowiednio dużego bufora docelowego tj. strlen(src) + 1. Różnicę pomiędzy obiema funkcjami opisano w rozdziale WARTOŚĆ ZWRACANA.
- strcat()
- Funkcja dołącza łańcuch, na który wskazuje src, po łańcuchu, na który wskazuje dst (nadpisując jego końcowy bajt null). To programista jest odpowiedzialny za alokację odpowiednio dużego bufora docelowego, tj. strlen(dst) + strlen(src) + 1.
Implementacja tych funkcji mogłaby wyglądać tak:
char * stpcpy(char *restrict dst, const char *restrict src) { char *p; p = mempcpy(dst, src, strlen(src)); *p = '\0'; return p; } char * strcpy(char *restrict dst, const char *restrict src) { stpcpy(dst, src); return dst; } char * strcat(char *restrict dst, const char *restrict src) { stpcpy(dst + strlen(dst), src); return dst; }
WARTOŚĆ ZWRACANA
ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
Interfejs | Atrybut | Wartość |
stpcpy(), strcpy(), strcat() | Bezpieczeństwo wątkowe | MT-bezpieczne |
STANDARDY
STANDARDY
ZASTRZEŻENIA
Łańcuchy src i dst nie mogą na siebie nachodzić.
Jeśli bufor docelowy nie jest wystarczającą duży, zachowanie jest niezdefiniowane. Zob. opis _FORTIFY_SOURCE w podręczniku feature_test_macros(7).
strcat() może być bardzo mało wydajny. Proszę zapoznać się z historią o malarzu Shlemielu.
PRZYKŁADY
#include <err.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char *p; char *buf1; char *buf2; size_t len, maxsize; maxsize = strlen("Witaj ") + strlen("świecie") + strlen("!") + 1; buf1 = malloc(sizeof(*buf1) * maxsize); if (buf1 == NULL) err(EXIT_FAILURE, "malloc()"); buf2 = malloc(sizeof(*buf2) * maxsize); if (buf2 == NULL) err(EXIT_FAILURE, "malloc()"); p = buf1; p = stpcpy(p, "Witaj "); p = stpcpy(p, "świecie"); p = stpcpy(p, "!"); len = p - buf1; printf("[len = %zu]: ", len); puts(buf1); // "Witaj świecie!" free(buf1); strcpy(buf2, "Witaj "); strcat(buf2, "świecie"); strcat(buf2, "!"); len = strlen(buf2); printf("[len = %zu]: ", len); puts(buf2); // "Witaj świecie!" free(buf2); exit(EXIT_SUCCESS); }
ZOBACZ TAKŻE
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Jarosław Beczek <bexx@poczta.onet.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
2 maja 2024 r. | Linux man-pages 6.8 |