strncmp со слишком большим значением n дает странный вывод - PullRequest
0 голосов
/ 03 мая 2018

У меня есть 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), не так ли?

1 Ответ

0 голосов
/ 03 мая 2018

Из опубликованной вами цитаты:

... Возвращает целое число меньше, равно или больше нуля ...

И 1, и 108 являются целыми числами больше 0. Нет гарантии, что функция должна вернуть 1 или -1.

...