stpncpy(3) Library Functions Manual stpncpy(3) NUME stpncpy, strncpy - umple o memorie tampon de marime fixa cu octei nenuli dintr-un ir de caractere, umpland cu octei nenuli dupa cum este necesar BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include char *strncpy(char dst[restrict .dsize], const char *restrict src, size_t dsize); char *stpncpy(char dst[restrict .dsize], const char *restrict src, size_t dsize); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): stpncpy(): Incepand cu glibc 2.10 _POSIX_C_SOURCE >= 200809L Inainte de glibc 2.10: _GNU_SOURCE DESCRIERE Aceste funcii copiaza octei nenuli din irul indicat de src in matricea indicata de dst. In cazul in care sursa are prea puini octei nenuli pentru a umple destinaia, funciile umplu destinaia cu octei nenuli la sfarit. In cazul in care memoria tampon de destinaie, limitata de dimensiunea sa, nu este suficient de mare pentru a conine copia, secvena de caractere rezultata este trunchiata. Pentru a vedea diferena dintre cele doua funcii, consultai seciunea VALOAREA RETURNATA. O implementare a acestor funcii ar putea fi: char * strncpy(char *restrict dst, const char *restrict src, size_t dsize) { stpncpy(dst, src, dsize); return dst; } char * stpncpy(char *restrict dst, const char *restrict src, size_t dsize) { size_t dlen; dlen = strnlen(src, dsize); return memset(mempcpy(dst, src, dlen), 0, dsize - dlen); } VALOAREA RETURNATA strncpy() returneaza dst. stpncpy() returneaza un indicator la un octet dupa ultimul caracter din secvena de caractere de destinaie. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |stpncpy(), strncpy() | Sigurana firelor | MT-Safe | +--------------------------------------+---------------------+---------+ STANDARDE strncpy() C11, POSIX.1-2008. stpncpy() POSIX.1-2008. ISTORIC strncpy() C89, POSIX.1-2001, SVr4, 4.3BSD. stpncpy() glibc 1.07. POSIX.1-2008. AVERTISMENTE Numele acestor funcii este confuz. Aceste funcii produc o secvena de caractere cu umplutura nula, nu un ir de caractere (a se vedea string_copying(7)). De exemplu: strncpy(buf, "1", 5); // { '1', 0, 0, 0, 0 } strncpy(buf, "1234", 5); // { '1', '2', '3', '4', 0 } strncpy(buf, "12345", 5); // { '1', '2', '3', '4', '5' } strncpy(buf, "123456", 5); // { '1', '2', '3', '4', '5' } Este imposibil sa se faca distincia intre trunchiere prin rezultatul apelului i o secvena de caractere care se potrivete cu memoria tampon de destinaie; trunchierea ar trebui detectata prin compararea lungimii irului de intrare cu dimensiunea memoriei tampon de destinaie. Daca avei de gand sa utilizai aceasta funcie in apeluri inlanuite, ar fi util sa dezvoltai o funcie similara care sa accepte un indicator la capatul (un octet dupa ultimul element) al memoriei tampon de destinaie in loc de dimensiunea acesteia. EXEMPLE #include #include #include #include int main(void) { char *p; char buf1[20]; char buf2[20]; size_t len; if (sizeof(buf2) < strlen("Salutare lume!")) errx("strncpy: truncating character sequence"); strncpy(buf2, "Salutare lume!", sizeof(buf2)); len = strnlen(buf2, sizeof(buf2)); printf("[len = %zu]: ", len); fwrite(buf2, 1, len, stdout); putchar('\n'); if (sizeof(buf1) < strlen("Salutare lume!")) errx("stpncpy: truncating character sequence"); p = stpncpy(buf1, "Salutare lume!", sizeof(buf1)); len = p - buf1; printf("[len = %zu]: ", len); fwrite(buf1, 1, len, stdout); putchar('\n'); exit(EXIT_SUCCESS); } CONSULTAI I wcpncpy(3), string_copying(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 12 februarie 2024 stpncpy(3)