`cout << argv[0]` возвращает шестнадцатеричное значение?

Возможный дубликат:
Невозможно распечатать значения argv[], используя std::cout в VC++

Код:

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    cout << argv[0] << endl;
    system("PAUSE");
    return 0;
}

Как видите, стандартное консольное приложение Win32.
Запутанная часть, ценность argv[0] выводится как 00035B88,
Это (AFAIK) запускается без параметров командной строки, так argv[] не должно иметь значения еще. (или это проблема?)

Тем не мение, argv[] объявлен как указатель (_TCHAR*) и я слышал, что cout распечатает адрес указателей. Это тот случай? Если так, как я могу напечатать / использовать значение argv?

3 ответа

_TCHAR является широкоформатным типом, если исполняемый файл был собран с опцией Unicode. cout не может обрабатывать широкие символы, поэтому вместо того, чтобы превратить его в char * и распечатывая строку, он (эффективно) использует значение по умолчанию void * принтер, который печатает адрес строки.

использование wcout вместо.

Хм. Первая запись массива в argv (т.е. argv[0]) - это, если я правильно помню, имя исполняемого файла. Так что это может быть печать адреса первого символа в массиве символов стиля ac. Попробуй это:

cout << (char *)argv[0] << endl;

В вашем project settings->General, Идти к "Character encoding" и выберите "multibyte character set", И поменяй свой _tmain() в main(), Теперь он будет печатать ваши символы.

Другие вопросы по тегам