По умолчанию _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
могут быть Unicode или 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;
}