Я использую getopt_long для обработки аргументов командной строки в приложении C ++. Все примеры показывают что-то вроде printf("Username: %s\n", optarg)
в примерах обработки. Это отлично подходит для показа примера, но я хочу иметь возможность хранить значения для последующего использования. Большая часть остального кода использует string
объекты вместо char*
, поэтому мне нужно преобразовать / скопировать / любое содержимое optarg в строку.
string bar;
while(1) {
c = getopt_long (argc, argv, "s:U:", long_options, &option_index);
if (c == -1) break;
switch(c)
{
case 'U':
// What do I need to do here to get
// the value of optarg into the string
// object bar?
bar.assign(optarg);
break;
}
}
Приведенный выше код компилируется, но когда он выполняется, я получаю ошибку Illegal instruction
, если я пытаюсь распечатать значение bar с помощью printf (похоже, он отлично работает для cout).
// Runs just fine, although I'm not certain it is actually safe!
cout << " bar: " << bar << "\n";
// 'Illegal instruction'
printf(" bar: %s\n", bar);
Я недостаточно знаю об отладке командной строки, чтобы лучше понять, что может быть за недопустимая инструкция. Я запускал valgrind, но из-за большого количества ошибок памяти, возникающих из-за этой ошибки, мне было трудно точно определить, что может быть причиной этой ошибки.