为了账号安全,请及时绑定邮箱和手机立即绑定

C+中的_tmain()和main()有什么区别?

C+中的_tmain()和main()有什么区别?

C++
跃然一笑 2019-07-05 12:25:59
C+中的_tmain()和main()有什么区别?如果我使用以下main()方法运行我的C+应用程序,一切正常:int main(int argc, char *argv[]) {    cout << "There are " << argc << " arguments:" << endl;    // Loop through each argument and print its number and value    for (int i=0; i<argc; i++)       cout << i << " " << argv[i] << endl;    return 0;}我得到了我所期望的,我的论点被打印出来了。但是,如果我使用_tmain:int _tmain(int argc, char *argv[]) {    cout << "There are " << argc << " arguments:" << endl;    // Loop through each argument and print its number and value    for (int i=0; i<argc; i++)       cout << i << " " << argv[i] << endl;    return 0;}它只显示每个参数的第一个字符。造成这种情况的原因是什么?
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

_tmain是一个宏,它根据是否使用Unicode或ASCII编译而重新定义。它是Microsoft的扩展,不能保证在任何其他编译器上都能工作。

正确的声明是

 int _tmain(int argc, _TCHAR *argv[])

如果定义了宏unicode,则扩展为

int wmain(int argc, wchar_t *argv[])

否则它会扩展到

int main(int argc, char *argv[])

您的定义每一个都有一点,并且(如果您定义了Unicode)将扩展到

 int wmain(int argc, char *argv[])

这完全是错误的。

cout适用于ASCII字符。如果您使用的是宽字符,则需要std:wcout。

试试这样的东西

#include <iostream>#include <tchar.h>#if defined(UNICODE)
    #define _tcout std::wcout#else
    #define _tcout std::cout#endifint _tmain(int argc, _TCHAR *argv[]) {
   _tcout << _T("There are ") << argc << _T(" arguments:") << std::endl;

   // Loop through each argument and print its number and value
   for (int i=0; i<argc; i++)
      _tcout << i << _T(" ") << argv[i] << std::endl;

   return 0;}

或者您可以预先决定是使用宽字符还是窄字符。*-)



查看完整回答
反对 回复 2019-07-05
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

_T约定用于指示程序应该使用为应用程序定义的字符集(Unicode、ASCII、MBCS等)。可以用_T()包围字符串,使它们以正确的格式存储。

 cout << _T( "There are " ) << argc << _T( " arguments:" ) << endl;


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 880 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信