Ваш sscanf
вызов пытается прочитать что-либо до (но не включая) первого -
в строке.Поскольку -
является (предположительно) первым символом, он aux
заканчивается пустым.
Вы можете сделать что-то вроде: sscanf(argv[1], "%*[-]%d", &n);
.Это пропустит любые начальные символы -
, поэтому аргументы 23
, -23
и --23
будут обрабатываться одинаково.Если вы хотите, чтобы --23
интерпретировался как -23
(только один из первых символов тире сигнализирует о флаге), вы можете использовать sscanf(argv[1], "-%d", &n);
(и в этом случае, если в командной строке просто 23
, преобразование будетпровалиться сразу).