我想做一些简单的事情:检查参数是什么。
void _tmain(int argc, WCHAR *argv[])
{
if(argv[4] == "-h");
{
//do stuff
}
}
我收到了从WCHAR *到const char *的不兼容错误。
这样的转换问题已被提出,但我找到的答案很多而且不简单。我是C ++的新手。
我正在寻找的不是指向某些复杂函数的指针,而是指向我的程序中使用它的实际代码。
只是寻找一些简单,直接,有效的代码。谢谢!
答案 0 :(得分:1)
这里有两个问题:
将“指向char
”的指针与字符串对象的逻辑概念相关联。在C(和C ++)中,指向char
(char*
)的指针按惯例只是一个C风格的字符串。我的意思是,如果你终止它(\0
)并使用适当的库方法。因为指向char
的指针不是实际的字符串类型,所以您正在执行指针相等而不是逻辑相等。
将宽字符(L"A"
)与窄字符("A"
)混淆。这是两个截然不同的概念,不太可能对您有所帮助。
我建议放弃Unicode入口点:
/* do you really want C or C++? */
int main(int argc, char **argv)
{
/* now we're "narrow" characters, which will be more natural for you */
改进测试(或使用getopt):
if (0 == strcmp(argv[4], "-h"))
{
/* argv[4] is equal to "-h" */
如果您真的想要C ++,那么您应该使用std::string
而不是旧的C风格字符串。
答案 1 :(得分:0)
试试这个:
#include <string>
void _tmain(int argc, WCHAR *argv[])
{
typedef std::basic_string<WCHAR> string_type;
static const string_type help( TEXT("-h") );
if(argv[4] == help);
{
//do stuff
}
...
}
我认为TEXT宏仍然存在 - 多年来我没有做过任何windows c ++编程。
我还假设-h代表“帮助”:)
答案 2 :(得分:0)
#include <string.h>
void _tmain(int argc, WCHAR *argv[])
{
if( 0 == wcscmp(argv[4], L"-h") )
{
//do stuff
}
}
应该这样做。
答案 3 :(得分:0)
您无法将指针与字符数组(无论WCHAR*
还是char*
)进行比较,以检查其内容是否相等(这些内容指向内存中)
你可以试试s.th.像这样:
if(std::wstring(argv[4]) == std::wstring(L"-h"))
{
// ...
}