2012-04-04 2 views
0

При попытке взять некоторые аргументы для C. Мне было очень трудно получить argv[] для работы. У меня есть:Почему я получаю исключение с плавающей запятой?

int main(int argc, char *argv[]) 
{ 
    void updateNext(); 
    void fcfs(); 
    void spn(); 
    void srt(); 

    fp = fopen(argv[0],"r"); 
    op = fopen("output.dat","a+"); 

    if (strcmp(argv[1],"FCFS")!=0) 
    { 
    fcfs(); 
    } 

    if (strcmp(argv[1],"SPN")!=0) 
    { 
    spn(); 
    } 

    if (strcmp(argv[1],"SRT")!=0) 
    { 
    srt(); 
    } 
} 

Я хотел бы ввести что-то в формате myprog input.data FCFS, но приведенный выше код дает мне ошибку для «исключения точки поплавка» исключение исчезает после того, как я жесткий код input.dat как строка в программа. Что-то не так с argv[0] возможно?

+0

Да. argv [0] обычно относится к скомпилированному двоичному myprog и никогда не содержит первый параметр командной строки. –

+0

'strcmp (argv [1]," FCFS ")! = 0' - в соответствии с остальной частью вашего кода должно быть' strcmp (argv [1], "FCFS") == 0'. Поскольку 'strcmp' возвращает 0, если строки соответствуют – valdo

ответ

7

В C, argv[0] - это название вашей программы (точнее, первое слово t он пользователь вводит в командной строке для запуска вашей программы, если запускается из оболочки).

Итак, избегая argv[0] для ваших целей, вы хотите посмотреть на argv[1] для имени файла и argv[2] для другого параметра.

Это было бы понятно, если бы вы использовали отладчик для отслеживания через вашу программу, или просто выводил значение, прежде чем вы использовали его:

printf("using file name %s\n", argv[0]); 
fp = fopen(argv[0],"r"); 

Это также хорошая идея, чтобы убедиться, что у вас есть достаточно команды параметры линии по проверке argc перед обращением argv: "Любой неправильный с ARGV [0], возможно,"

if (argc < 3) { 
    fprintf(stderr, "not enough command line parameters\n"); 
    exit(1); 
} 
5

В C argv[0] обычно называется имя, с которым была вызвана программа. Вы ищете argv[1] и argv[2].

Как сторона отмечает:

  • вы должны проверять argc до касания argv
  • нет никакой гарантии argv[0] содержит имя программы или даже что-то разумное
Смежные вопросы