strcmp(3) Library Functions Manual strcmp(3)

strcmp, strncmp - compară două șiruri

Biblioteca C standard (libc, -lc)

#include <string.h>
int strcmp(const char *s1, const char *s2);
int strncmp(const char s1[.n], const char s2[.n], size_t n);

Funcția strcmp() compară cele două șiruri s1 și s2. Nu se ia în considerare locația (pentru o comparație care ține cont de locație, a se vedea strcoll(3)). Comparația se face folosind caractere fără semn.

strcmp() returnează un număr întreg care indică rezultatul comparației, după cum urmează:

0, în cazul în care s1 și s2 sunt egale;
o valoare negativă dacă s1 este mai mic decât s2;
o valoare pozitivă dacă s1 este mai mare decât s2.

Funcția strncmp() este similară, cu excepția faptului că aceasta compară numai primii (cel mult) n octeți din s1 și s2.

Funcțiile strcmp() și strncmp() returnează un număr întreg mai mic, egal sau mai mare decât zero dacă se constată că s1 (sau primii n octeți ai acestuia) este mai mic decât, se potrivește sau este mai mare decât s2.

Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).

Interfață Atribut Valoare
strcmp(), strncmp() Siguranța firelor MT-Safe

POSIX.1 specifică doar că:

Semnul unei valori de returnare diferită de zero este determinat de semnul diferenței dintre valorile primei perechi de octeți (ambele interpretate ca fiind de tip unsigned char) care diferă în șirurile comparate.

În glibc, ca și în majoritatea celorlalte implementări, valoarea de returnare este rezultatul aritmetic al scăderii ultimului octet comparat din s2 din ultimul octet comparat din s1; (dacă cele două caractere sunt egale, această diferență este 0).

C11, POSIX.1-2008.

POSIX.1-2001, C89, SVr4, 4.3BSD.

Programul de mai jos poate fi utilizat pentru a demonstra funcționarea lui strcmp() (atunci când i se dau două argumente) și strncmp() (atunci când i se dau trei argumente). Mai întâi, câteva exemple care utilizează strcmp():


$ ./string_comp ABC ABC
<str1> și <str2> sunt egale
$ ./string_comp ABC AB      # codul ASCII de 'C' este 67; 'C' - '\0' = 67
<str1> este mai mare decât <str2> (67)
$ ./string_comp ABA ABZ     # codul ASCII de 'A' este 65; codul ASCII de 'Z' este 90
<str1> este mai mic decât <str2> (-25)
$ ./string_comp ABJ ABC
<str1> este mai mare decât <str2> (7)
$ ./string_comp $'\201' A   # 0201 - 0101 = 0100 (sau 64 zecimal)
<str1> este mai mare decât <str2> (64)

Ultimul exemplu utilizează o sintaxă specifică bash(1) pentru a produce un șir care conține un cod ASCII pe 8 biți; rezultatul demonstrează că această comparare a șirurilor utilizează caractere fără semn.

Și apoi câteva exemple folosind strncmp():


$ ./string_comp ABC AB 3
<str1> este mai mare decât <str2> (67)
$ ./string_comp ABC AB 2
<str1> și <str2> sunt egale în primii 2 octeți

/* string_comp.c
   Licențiat sub licența publică generală GNU v2 sau o versiune ulterioară.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char *argv[])
{
    int res;
    if (argc < 3) {
        fprintf(stderr, "Utilizare: %s <str1> <str2> [<len>]\n", argv[0]);
        exit(EXIT_FAILURE);
    }
    if (argc == 3)
        res = strcmp(argv[1], argv[2]);
    else
        res = strncmp(argv[1], argv[2], atoi(argv[3]));
    if (res == 0) {
        printf("<str1> și <str2> sunt egale");
        if (argc > 3)
            printf(" în primii %d octeți\n", atoi(argv[3]));
        printf("\n");
    } else if (res < 0) {
        printf("<str1> este mai mic decât <str2> (%d)\n", res);
    } else {
        printf("<str1> este mai mare decât <str2> (%d)\n", res);
    }
    exit(EXIT_SUCCESS);
}

memcmp(3), strcasecmp(3), strcoll(3), string(3), strncasecmp(3), strverscmp(3), wcscmp(3), wcsncmp(3), ascii(7)

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

2 mai 2024 Pagini de manual de Linux 6.8