while((c=getopt(argc,argv,"AR:"))!=-1){
switch(c){
...
case '?': if (optopt == 'c')
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
getopt
никогда не установит optopt
в 'c' в вашей программе.
В примере кода, из которого вы его вставили, строка формата была "abc:".Поэтому optopt
будет 'c', если -c
был передан без аргумента (что, как отмечено выше, двоеточие в строке формата означает, что это требуется).Ваша программа вообще не имеет опции -c
.Вы не удалили спецификацию третьего варианта, потому что ваша программа принимает 2 аргумента ... верно?
Убедитесь, что вы #included <unistd.h>
и <ctype.h>
, как это сказано, затем попробуйте объявить переменные getopt как extern
.Memory protection violation
может означать, что компоновщик в настоящее время извлекает их как транзитивные включения, но ядро не ожидает, что ваш процесс получит доступ к области общей памяти, в которую отображается часть libc.Просто предположение, но это действительно помогло устранить некоторые ошибки, с которыми я столкнулся при попытке запустить ваш код.
https://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using-Getopt https://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html#Example-of-Getopt