1

我对 Visual C++ 很陌生,所以这可能是一个“男生”错误,但以下代码没有按我的预期执行:

#include "stdafx.h"
#include <string.h>

int _tmain(int argc, _TCHAR* argv[])
{
    if (strcmp((char*)argv[1], "--help") == 0)
    {
        printf("This is the help message."); //Won't execute
    }
    return 0;
}

命名的可执行文件Test.exe按如下方式启动

Test.exe --help

我期待该消息This is the help message.,但我没有看到它 - 调试显示if条件显示为 -1 而不是 0,正如我所期望的那样。我究竟做错了什么?

4

1 回答 1

1

好的,我已经弄清楚发生了什么。argv[]数组被声明为,这是一个宏,它根据TCHAR*项目是否启用了 Unicode(wchat_t如果启用或未启用)来调整类型char。我试图使用的strcmp函数是非 Unicode 字符串比较,而wcscmpUnicode 等效。该_tcscmp函数根据 Unicode 设置使用适当的字符串比较函数。如果我替换strcmp_tcscmp,问题就解决了!

#include "stdafx.h"
#include <string.h>

int _tmain(int argc, _TCHAR* argv[])
{
    if (_tcscmp(argv[1], _T("--help")) == 0)
    {
        printf("This is the help message."); //Will execute :)
    }
    return 0;
}

_T如果启用了 Unicode,该函数会将参数转换为 Unicode。

另请参阅:是否建议使用 strcmp 或 _tcscmp 比较 Unicode 版本中的字符串?

于 2012-04-23T12:05:10.403 回答