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