无法从“WCHAR”转换为“WCHAR [260]”

Posted

技术标签:

【中文标题】无法从“WCHAR”转换为“WCHAR [260]”【英文标题】:cannot convert from 'WCHAR' to 'WCHAR [260]' 【发布时间】:2009-05-21 11:28:17 【问题描述】:

我正在尝试修改 amcap,这是 Windows SDK 示例中的一个应用程序,用于从分辨率为 1600x1200 像素的 UVC 网络摄像头捕获视频。

我正在尝试在这里硬编码一些变量,例如文件名、默认分辨率、格式类型等。

WCHAR wszCaptureFile[260]; 

gcap.wszCaptureFile = (WCHAR)"Capture.avi\0"    //modified 

gettnig 错误:

1>.\amcap.cpp(3887) : 错误 C2440: '=' : 无法从 'WCHAR' 转换为 'WCHAR [260]'

我能做些什么来纠正这个问题?

【问题讨论】:

【参考方案1】:

您不能用 = 分配数组 wszCaptureFile(就像您所做的那样)。您可以使用strcpy 等复制方法。

wcscpy 和 _mbscpy 是宽字符 和多字节字符版本 strcpy

例如:

wcscpy(gcap.wszCaptureFile, L"Capture.avi");

【讨论】:

【参考方案2】:

提供文字宽字符串并使用安全复制功能:

wcscpy_s(gcap.wszCaptureFile, L"Capture.avi");

文字字符串提供终止零字节。

【讨论】:

【参考方案3】:

根据 cmets 对答案进行了更新...并考虑 wstrcpy_s。

wstrcpy ( wszCaptureFile, L"Capture.avi" );

【讨论】:

... 而 wstrcpy_s(...) 是安全的实现。 他还需要使用L前缀:wstrcpy(wszCaptureFile, L"Capture.avi"); Daniel 是正确的,安全版本更好,但考虑到他对 C 的经验,稍微复杂一点,现在简单版本更好。 安全版本不再复杂——目标为数组时无需提供大小参数【参考方案4】:

您将字符串转换为 WCHAR 元素,而不是您希望的 WCHAR 数组。 试试:

wszCaptureFile = L"Capture.avi\0";

【讨论】:

以上是关于无法从“WCHAR”转换为“WCHAR [260]”的主要内容,如果未能解决你的问题,请参考以下文章

VS错误C++:不存在从 "WCHAR [260]" 转换到 "std::basic_string<char," 的适当构造函数

strcmp 错误“WCHAR [260]”到“const char *”[重复]

nasal脚本起源与环境搭建(flightgear开源项目)

error C2440: “=”: 无法从“const wchar_t [4]”转换为“LPWSTR”

错误 C2440:“默认参数”:无法从“const wchar_t [1]”转换为“BSTR”

无法将“wchar_t”转换为“LPCSTR”[重复]