Вы не проверяете, есть ли хотя бы один аргумент командной строки, или что этот аргумент имеет длину менее 200 символов, а также вы не проверяете возвращаемые значения strtok
: у вас будет неопределенное поведение, если задана командабез аргумента или если аргумент не содержит символов v
, V
или ,
.
Если вы эффективно скомпилируете программу с gcc -ansi main.c -o main
и запустите ее с опубликованным аргументом как ./main 6000V7000
вы не должны получить ошибку сегментации ... Есть что-то, о чем вы нам не говорите;)
Всегда лучше избегать диких предположений: проверяйте неожиданное, чтобы во всех случаях поведение вашей программы определялось.
Вот более простой подход к вашей проблеме с использованием sscanf()
:
#include <stdio.h>
int main(int argc, char *argv[]) {
int a, b;
if (argc > 1 && sscanf(argv[1], "%d%*1[vV,]%d", &a, &b) == 2)
printf("a=%d, b=%d\n", a, b);
return 0;
}