.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
.\" and Copyright 2020 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.\" References consulted:
.\"     Linux libc source code
.\"     Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
.\"     386BSD man pages
.\" Modified Sat Jul 24 18:08:52 1993 by Rik Faith (faith@cs.unc.edu)
.\" Modified 2001-08-31, aeb
.\"
.TH STRCMP 3  2021-03-22 "" "Linux Programmer's Manual"
.SH NAME
strcmp, strncmp \- compare two strings
.SH SYNOPSIS
.nf
.B #include <string.h>
.PP
.BI "int strcmp(const char *" s1 ", const char *" s2 );
.BI "int strncmp(const char *" s1 ", const char *" s2 ", size_t " n );
.fi
.SH DESCRIPTION
The
.BR strcmp ()
function compares the two strings
.I s1
and
.IR s2 .
The locale is not taken into account (for a locale-aware comparison, see
.BR strcoll (3)).
The comparison is done using unsigned characters.
.PP
.BR strcmp ()
returns an integer indicating the result of the comparison, as follows:
.IP \(bu 2
0, if the
.I s1
and
.I s2
are equal;
.IP \(bu
a negative value if
.I s1
is less than
.IR s2 ;
.IP \(bu
a positive value if
.I s1
is greater than
.IR s2 .
.PP
The
.BR strncmp ()
function is similar, except it compares
only the first (at most)
.IR n
bytes of
.I s1
and
.IR s2 .
.SH RETURN VALUE
The
.BR strcmp ()
and
.BR strncmp ()
functions return an integer
less than, equal to, or greater than zero if
.I s1
(or the first
.I n
bytes thereof) is found, respectively, to be less than, to
match, or be greater than
.IR s2 .
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.BR strcmp (),
.BR strncmp ()
T}	Thread safety	MT-Safe
.TE
.hy
.ad
.sp 1
.SH CONFORMING TO
POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
.SH NOTES
POSIX.1 specifies only that:
.RS
.PP
The sign of a nonzero return value shall be determined by the sign
of the difference between the values of the first pair of bytes
(both interpreted as type
.IR "unsigned char" )
that differ in the strings being compared.
.RE
.PP
In glibc, as in most other implementations,
the return value is the arithmetic result of subtracting
the last compared byte in
.I s2
from the last compared byte in
.IR s1 .
(If the two characters are equal, this difference is 0.)
.SH EXAMPLES
The program below can be used to demonstrate the operation of
.BR strcmp ()
(when given two arguments) and
.BR strncmp ()
(when given three arguments).
First, some examples using
.BR strcmp ():
.PP
.in +4n
.EX
$ \fB./string_comp ABC ABC\fP
<str1> and <str2> are equal
$ \fB./string_comp ABC AB\fP      # \(aqC\(aq is ASCII 67; \(aqC\(aq \- \(aq\0\(aq = 67
<str1> is greater than <str2> (67)
$ \fB./string_comp ABA ABZ\fP     # \(aqA\(aq is ASCII 65; \(aqZ\(aq is ASCII 90
<str1> is less than <str2> (\-25)
$ \fB./string_comp ABJ ABC\fP
<str1> is greater than <str2> (7)
$ .\fB/string_comp $\(aq\e201\(aq A\fP   # 0201 \- 0101 = 0100 (or 64 decimal)
<str1> is greater than <str2> (64)
.EE
.in
.PP
The last example uses
.BR bash (1)-specific
syntax to produce a string containing an 8-bit ASCII code;
the result demonstrates that the string comparison uses unsigned
characters.
.PP
And then some examples using
.BR strncmp ():
.PP
.in +4n
.EX
$ \fB./string_comp ABC AB 3\fP
<str1> is greater than <str2> (67)
$ \fB./string_comp ABC AB 2\fP
<str1> and <str2> are equal in the first 2 bytes
.EE
.in
.SS Program source
\&
.EX
/* string_comp.c

   Licensed under GNU General Public License v2 or later.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main(int argc, char *argv[])
{
    int res;

    if (argc < 3) {
        fprintf(stderr, "Usage: %s <str1> <str2> [<len>]\en", 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> and <str2> are equal");
        if (argc > 3)
            printf(" in the first %d bytes\en", atoi(argv[3]));
        printf("\en");
    } else if (res < 0) {
        printf("<str1> is less than <str2> (%d)\en", res);
    } else {
        printf("<str1> is greater than <str2> (%d)\en", res);
    }

    exit(EXIT_SUCCESS);
}
.EE
.SH SEE ALSO
.BR bcmp (3),
.BR memcmp (3),
.BR strcasecmp (3),
.BR strcoll (3),
.BR string (3),
.BR strncasecmp (3),
.BR strverscmp (3),
.BR wcscmp (3),
.BR wcsncmp (3),
.BR ascii (7)
