Мы все знаем, что проблема может быть вызвана переполнением, и именно поэтому strn * существуют - и большую часть времени они имеют смысл. Однако я видел код, который использует strncmp для сравнения параметров командной строки, например так:
if(... strncmp(argv[i], "--help", 6) == 0
Теперь я бы подумал, что это не нужно и, возможно, даже опасно (для более длинных параметров было бы легко неправильно подсчитать символы в литерале).
strncmp останавливается на пустых значениях, и код уже предполагает, что argv [i] завершается нулем. Любой строковый литерал гарантированно заканчивается нулем, так почему бы не использовать strcmp?
Возможно, я что-то упускаю, но я видел это несколько раз, и на этот раз меня это заинтриговало достаточно, чтобы спросить.