strcmp
останавливается на первой разнице.
Поскольку "A"
на самом деле представляет собой два символа ('A'
и 0), при сравнении с "AB"
первая разница находится на втором символеи 0 меньше 'B'
в вашей кодировке 1 , поэтому "A"
получается меньшим.
При сравнении "B"
с "AB"
первое отличиена первом символе, с "AB"
, получающимся меньшим.
Это все довольно хорошо, поскольку строки упорядочены так, как они были бы в словаре.
1 С тянет быстро в этом.Хотя 'B' является целым числом и может быть отрицательным, а strcmp принимает const char *, 7.24.4 1 подкрадывается к этому: «Знак ненулевого значения, возвращаемого функциями сравнения memcmp, strcmp и strncmp, определяется знакомразницы между значениями первой пары символов (оба интерпретируются как символы без знака), которые различаются в сравниваемых объектах ». Так что это не просто кодировка OP - в любой кодировке разница (символ без знака) '\ 0'- (без знака) «B» отрицательно.За исключением теоретической реализации с sizeof (int) == 1. Признать Eric Postpischil .