strverscmp(3)

strverscmp3

Compare strings according to natural order

Usage

#include <string.h>

int

strverscmp(const char *s1, const char *s2);

Library

Standard C Library (libc, -lc)

Overview

The strverscmp() function compares the null-terminated strings s1 and s2 according to their natural order and returns an integer greater than, equal to, or less than 0, depending on whether s1 is greater than, equal to, or less than s2.

More specifically, this natural order is found by iterating over both strings until a difference is found. If the difference is between non-decimal characters, strverscmp() acts like strcmp(3) (thus, the ordering would be "a", "b", "train"). If a decimal digit is found, the whole number is read and compared (thus, the ordering would be "9", "10", "420" which is different to lexicographic order, what strcmp(3) would have done). Numbers with leading zeroes are interpreted as fractional parts (even without a decimal point), and numbers with more leading zeroes are placed before numbers with fewer leading zeroes (thus, the ordering would be "000", "00", "01", "010", "09", "0", "1", "9", "10").

Releases

13 releases since FreeBSD 13.2-RELEASE; the text changed 1 time.

  1. 13.2
  2. 13.3–16.0

Standards

The strverscmp() function is a GNU extension and conforms to no standard.

History

The strverscmp() function was added in FreeBSD 13.2.

From base 16.0-CURRENT-20261027-61c70dc16a79 in FreeBSD 16.0-CURRENT (2026-10-27). Parsed by carta from the page's mdoc source.