table of contents
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 (niewydane) |