最近写一个控制台程序,并且希望该控制台程序运行时不显示控制台窗口,于是在程序include语句下面加入如下代码 #pragma comment (linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") 而原先的控制台程序入口为int wmain(int argc, _TCHAR* argv[]),必须要改为main才能编译通过 但是问题来了,原来运行没问题的代码,现在出问题了 if ((argc > 1) && ((*argv[1] == L'-') || (*argv[1] == L'/'))){ } } 通过打印,调试后发现,我在控制台中输入命令***.exe /set,argv[1] + 1 读取到的内容为et, 而在int wmain(int argc, _TCHAR* argv[])函数中argv[1] + 1 读取到的内容为set。Why? 后来查了一下这两个函数的区别,发现有如下特点: 同样输入***.exe /set wmain中argv[1] = "/" ,占两个字节 main中argv[1] = "/s" ,占两个字节 argv[1]均是双字节变量,而在wmain入口中,用户的输入字符,每个字符按UNICODE方式存储, 而在main入口中,用户的输入字符,每个字符按ANSCII方式存储。 因此修改如下: if ((argc > 1) && ((*argv[1] == L'-') || (*argv[1] == L'/'))){ } } |
|