我正在尝试使用C ++更改文件的属性,这是我做错了什么?该代码已完全使用
https://docs.microsoft.com/zh-cn/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数组分配给指向非const的指针(尽管某些编译器接受此类代码,只是发出警告)。 ,仅允许采用另一种方式。
现在的问题是,如何摆脱困境?
一般来说:
如果您100%确信(真的,至少没有疑问!)字符串不会被修改,则可以将const抛弃:
wchar_t* ptr = const_cast<wchar_t*>(L"...");
如果您最不怀疑(修改字符串文字是未定义的行为!),则将文字复制到数组中:
wchar_t value[] = L"...";
ptr = value;
此时,您需要确保被调用的函数不会拥有该字符串的所有权,但是:它会尝试释放该字符串吗?它将指针存储在某处以供以后使用,以便所指向的数组必须比调用函数的作用域更长寿吗?
如果是这样,您可能需要使用全局数组或malloc
内存将字符串复制到...
在特定情况下:
如果你窥视到的文件读取和写入功能,您会看到有问题的结构将被传递给const
参数。好吧,实际上,这将使指针不变,而不是指向的数据不变,但是假设字符串不会被修改(如果需要,可以复制到某个地方–好了,写入某个文件)看起来仍然很安全,因此您实际上应该可以const_cast
选择该选项。
注意:该示例不会释放再次读取的字符串;现在非常有趣的所有权问题(谁将再次释放他们)?不幸的是,该文档并不准确...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句