У меня есть две строки для сравнения, и я подумал, что использование strncmp
будет лучше, чем использование strcmp
, потому что я знаю длину одной из строк.
char * a = "hel";
char * b = "he"; // in my real code this is scanned so it user dependent
for(size_t i = 0; i < 5; i++){
printf("strncmp: %d\n", strncmp(a,b,i));
}
Я ожидал, что результат будет
0
0
0
1 // which is the output of printf("strcmp: %d\n", strncmp(a,b));
1
так как только на 4-й итерации (i = 3
) строки начинают различаться, а вместо этого я получил
0
0
0
108 // guessing this is due to 'l' == 108 in ascii
108
и я не понимаю, почему, как говорит man:
Функция
strcmp()
сравнивает две строки s1 и s2. Он возвращает целое число, меньшее, равное или большее нуля, если найдено, что s1 соответственно меньше, соответствует или больше s2.Функция
strncmp()
аналогична, за исключением того, что она сравнивает только первые (не более) n байтов s1 и s2.
что означает, что он должен остановиться после достижения '\0'
и, таким образом, просто вернуть 1 (например, strcmp
), не так ли?
NUL
все еще там. - person Angew is no longer proud of SO   schedule 03.05.2018