У меня есть 2 строки для сравнения, и я подумал, что использование 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
и я не понимаю почему, как человек говорит:
Функция strcmp()
сравнивает две строки s1 и s2. Он возвращает целое число меньше, равно или больше нуля, если найдено s1, соответственно, меньше, для соответствия или больше s2.
Функция strncmp()
аналогична, за исключением того, что она сравнивает только первые (максимум) n байтов s1 и s2.
что означает, что он должен остановиться после достижения '\0'
и, таким образом, просто вернуть 1 (как strcmp
), не так ли?