bkelly13 Ответов: 3

Получение символов из argv


Приложение работает под управлением Windows 7 Enterprise, MFC, Visual Studio 2008, C++, unicode

Необходимый аргумент - это один символ. VS настроен на предоставление аргумента командной строки, значение равно "1", argc увеличен с 1 до 2 после добавления аргумента командной строки.

char str_number = __argv[ 1 ];

Ошибка компиляции не может преобразовать из char* в char, круто, понятно

char str_number = *__argv[ 1 ];

Нарушение прав доступа местоположении 0x00000004

char str_number = *__argv[ 1,0];

Нарушение прав доступа местоположении адресу 0x00000000

Что я уже пробовал:

Я попробовал примеры, показанные в блоке: опишите проблему.

Patrice T

А у вас есть вопрос ?

3 Ответов

Рейтинг:
2

CPallini

Оба

char str_number = *__argv[1];

и
char str_number = __argv[1][0];

должен работать.

Пожалуйста, проверяйте всегда __argc значение перед доступом __argv, как указывает Ричард.


Рейтинг:
2

nv3

Если в вашем приложении включен unicode, вы должны использовать _ _ wargv вместо _ _ argv. Попробуйте еще раз повторить второй пример с этим изменением, и вам должно повезти.


Richard MacCutchan

Как это поможет, когда OP пытается получить доступ к char?

nv3

Он пытается получить доступ к первому символу первого аргумента. * _ _ argv[1] обычно должен это делать. Но в случае приложения unicode windows передает вектор аргументов не в _ _ argv,а в __wargv. Вероятно, поэтому он и получил нарушение доступа.

Рейтинг:
1

Richard MacCutchan

Сначала вам нужно проверить значение __argc прежде чем пытаться обратиться к любому из __argv элементы. Что-то вроде:

if (__argc > 1)
    char str_number = *__argv[ 1 ];

В качестве альтернативы вы можете использовать Класс CCommandLineInfo[^].