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¶
Tłumaczenie niniejszej strony podręcznika: 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.
| 15 czerwca 2024 r. | Linux man-pages 6.9.1 |