【问题标题】:'strcpy' : cannot convert parameter 2 from 'WCHAR *' to 'const char *'strcpy' : 无法将参数 2 从 'WCHAR *' 转换为 'const char *
【发布时间】:2012-01-28 20:59:30
【问题描述】:

strcpy 有一些问题...

收到此错误:

strcpy' : cannot convert parameter 2 from 'WCHAR *' to 'const char *

这里是代码...

char FunctionName[ 256 ]; 
UFunction *pUFunc                        = NULL;
strcpy( FunctionName, pUFunc->GetFullName() );

还有:

WCHAR* UObject::GetFullName ()
{
    if ( this->Class && this->Outer )
    {
        static WCHAR ObjectName[ 256 ];

        if (Outer == NULL)
        {
            wsprintf(ObjectName, L"");
        }
        else
        {
            if (Outer->Outer)
                wsprintf(ObjectName, L"%s %s.%s.%s", Class->Name.GetName(), Outer->Outer->Name.GetName(), Outer->Name.GetName(), Name.GetName());
            else if(Outer)
                wsprintf(ObjectName, L"%s %s.%s", Class->Name.GetName(), Outer->Name.GetName(), Name.GetName());
        }
        return ObjectName;
    }

    return L"(null)";
}

【问题讨论】:

  • 在这种情况下,错误消息非常清楚——strcpy 根本不处理宽 C 风格的字符串。此外,尝试存储在普通的 C 样式字符串中并没有任何意义。
  • 请注意strcpy()wcscpy() 都是用于复制字符串,而不是用于转换字符串。您需要一个不同的(非标准)函数来在普通 charWCHAR 之间进行转换。
  • 您的代码非常混乱。您正在访问已事先明确设置为 NULL 的对象指针的成员。

标签: c++ char constants strcpy wchar


【解决方案1】:

WCHAR 项目需要 wcscpy,而不是 strcpy。但真正的问题是您正试图将宽字符串转换为窄字符串。 WideCharToMultiByte,因为您似乎在 Windows 上。

【讨论】:

  • 我试过了... 'wcscpy' : 无法将参数 1 从 'char [256]' 转换为 'wchar_t *'
  • @E3pO: 显然这两个参数都需要是wchar_t *类型,所以你必须先将你的ASCII字符串转换为unicode
  • @Niklas 他的目标是窄的,所以他真的在尝试将函数的宽结果转换为窄字符串。
  • @bmargulies:也许反过来,他的目标应该是广泛的。我们只能假设,但在一般情况下,从 unicode 转换为 ASCII 是不可能的。 编辑:所以你的猜测更好:)
  • 这太棒了!!!!我将我的项目从 Unicode 更改为 Multi-Byte 并且它有效!!!!。非常感谢。
【解决方案2】:

从错误中很明显:strcpy 期望 const char* 作为第二个参数,而您传递的是 WCHAR*

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多