По умолчанию _tmain
принимает строки Unicode в качестве аргументов, но cout
ожидает строки ANSI. Вот почему он печатает только первый символ каждой строки.
Если вы хотите использовать Unicode _tmain
, вы должны использовать его с TCHAR
и wcout
, как это:
int _tmain(int argc, TCHAR* argv[])
{
for (int c = 0; c < argc; c++)
{
wcout << argv[c] << " ";
}
return 0;
}
Или, если вы рады использовать строки ANSI, использовать нормальный main
с char
и cout
как это:
int main(int argc, char* argv[])
{
for (int c = 0; c < argc; c++)
{
cout << argv[c] << " ";
}
return 0;
}
немного более подробно: TCHAR
и _tmain
может быть Юникода или ANSI, в зависимости от настроек компилятора. Если UNICODE определен, что является дефолтом для новых проектов, они говорят Unicode. Это UNICODE не определено, они говорят ANSI. Поэтому теоретически вы можете написать код, который не нуждается в изменении между Unicode и ANSI-сборками - вы можете выбрать время компиляции, которое вы хотите.
Где этот спад с cout
(ANSI) и wcout
(Unicode). Нет _tcout
или эквивалент. Но вы можете тривиальным создать свой собственный и использовать это:
#if defined(UNICODE)
#define _tcout wcout
#else
#define _tcout cout
#endif
int _tmain(int argc, TCHAR* argv[])
{
for (int c = 0; c < argc; c++)
{
_tcout << argv[c] << " ";
}
return 0;
}
Также обратите внимание, что argv [0] - это имя программы, таким образом, не является одним из аргументов. Кулачный момент, но тот, который может принести пользу будущим цивилизациям, которые происходят на этой веб-странице. –