В C оператор ==
сравнивает на равенство.
Значения одного и того же числового типа сравниваются простым способом (т. Е. 2 + 2 == 4
верно).
Значения различных целочисленных (и нецелых числовых) типов подвергаются некоторому преобразованию. Смотрите в другом месте.
Указатели равны, если точка находится на одном и том же адресе.
Строковые литералы помещаются в память, не перекрывая ничего другого; в том числе не перекрывая ничего, на что указывает argv [i] (для i = 0 до argc).
Итак, вы сравниваете два неравных указателя; вот почему. Вы хотите использовать if (!strcmp(argv[i], "-n")) { ... }
.