Массив аргументов завершается нулем, и символы строк должны не быть const
- программам на C разрешено изменять аргументы, передаваемые в main
.
Используйте, например, это (обратите внимание, что вам нужно free
каждый из этих аргументов, поскольку они копируются в изменяемые строки с помощью strdup
):
#define arg(a) strdup(a)
char *argArray[] = {
arg("dcdraw"),
arg("-v"),
arg("-w"),
arg("-T"),
arg("/path/to/file"),
NULL
};
int argc = sizeof argArray / sizeof *argArray - 1;
или это (Составной литерал C99, не пропускает память, но имеет область действия!):
#define arg(a) (char[]){a}
char *argArray[] = {
arg("dcdraw"),
arg("-v"),
arg("-w"),
arg("-T"),
arg("/path/to/file"),
NULL
};
int argc = sizeof argArray / sizeof *argArray - 1;
Составной инициализатор C99 имеет время жизни блока, поэтому он будет недоступен после окончания текущего блока { ... }
.
В вашем случае, поскольку он работал для некоторого числа аргументов, это намекало бы на то, что причиной было отсутствие терминатора NULL, но в общем случае это то, что вы хотели бы сделать.