gpt4 book ai didi

c++ - 如何修复 "State Error (active) E0513 a value of type “const wchar_t *” 无法分配给类型为 “wchar_t *” 的实体“

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:37:47 28 4
gpt4 key购买 nike

我正在尝试使用 C++ 更改文件的属性我究竟做错了什么 ?代码完全拿下

https://learn.microsoft.com/en-us/windows/win32/stg/writeread-sample

propspec.ulKind = PRSPEC_LPWSTR;
propspec.lpwstr = L"Property Name";// this line problem

propvarWrite.vt = VT_LPWSTR;
propvarWrite.pwszVal = L"Property Value"; // this line problem

最佳答案

正如错误消息已经表明的那样:字符串文字的类型为 const char[]const wchar_t[](取决于底层类型),您不能合法地赋值指向非常量指针的 const 数组(有些编译器接受这样的代码,只是发出警告),仅允许相反的方式。

现在的问题是,如何摆脱困境?

一般来说:

如果您100%确定(真的,一点也不怀疑!)字符串不会被修改,您可以直接丢弃 const:

wchar_t* ptr = const_cast<wchar_t*>(L"...");

如果您对(字符串文字的修改是未定义的行为!)毫无疑问,则将文字复制到数组中:

wchar_t value[] = L"...";
ptr = value;

此时,您需要确保被调用函数不会取得字符串的所有权:它会尝试释放字符串吗?它会把指针存储在某个地方供以后使用,这样指向的数组必须比调用函数的范围存在得更久吗?

如果是这样,您可能需要使用全局数组或malloc 内存将字符串复制到...

在特定情况下:

如果您查看 read 的文档和 write函数,您会看到有问题的结构被传递给 const 参数。好吧,实际上,这将使 pointer 成为常量,而不是指向的数据,仍然可以安全地假设字符串不会被修改(如果需要,复制到某个地方 – 好吧,写入某个文件),因此您实际上应该可以使用 const_cast 选项。

旁注:该示例不会释放再次读回的字符串;现在关于所有权的问题非常有趣(谁将再次释放它们)?不幸的是,文档并不准确......

关于c++ - 如何修复 "State Error (active) E0513 a value of type “const wchar_t *” 无法分配给类型为 “wchar_t *” 的实体“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500466/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com